Mysql数据库中utf8_bin、utf8_unicode_ci、utf8_general_ci的区别和选择技巧及sql语句强行更改总结
现在很多朋友在新建数据库的时候, 都会选择utf8,但是对于后面的排序规则,却不知道如何选择,往往随意选择一个。
我们往往常用的有
utf8_general_ci 不区分大小写,不支持扩展
utf8_general_cs 区分大小写,不支持扩展
utf8_unicode_ci不区分大小写,支持扩展
utf8_unicode_ci区分大小写,支持扩展
utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容。
一、常用排序规则比较解析
1、ci 和cs的区别,二者主要在于是否支持大小写
例如:SELECT * FROM user WHERE username like 'liu';
如果是在区分大小写的数据库中 只能查询到包含 liu的名字。
而在不区分大小的数据库中,能查到 包含liu、Liu、LIu、LIU等所有的名字。
2、general与unicode的区别
utf8_unicode_ 的最主要的特色是支持扩展,,即当把一个字母看作与其它字母组合相等时。例如,在德语和一些其它语言中‘ß'等于‘ss'。
utf8_general_ 不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的 校对规则相比,比较正确性较差。
3、其他除了general与unicode之外的规则是什么
当前,utf8_unicode_校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。
这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt 、Tatar、Bashkir和Mari。所以其他的规则都是针对具体某种小语种语言的,我们无须理会即可。
4、如何选择general与unicode
目前我们用的都是中文和英文居多,多以大家放心的选择utf8_general_ci 或者utf8_general_cs即可。
5、为什么我的电脑上没有发现utf8_general_cs
windows不支持utf8_general_cs ,所以一些数据库软件直接不显示utf8_general_cs,那需要区分大小写的可以直接用utf8_bin。
6、utf8_bin很强大
除了可以区分大小写之外,还可以保存二进制,像图片、压缩包、软件等,我们通常都是直接把文件保存在服务器上,在数据库中保存地址,如果需要,你可以直接保存在数据库中,当然排序规则要用utf8_bin才可以。
不过俺老刘不建议你大量的这样做,会让数据变得很大,读取变慢。
二、修改Mysql数据的字符集和排序规则
1、修改数据库的字符集和排序规则
ALTER DATABASE db1 CHARACTER SET utf8 COLLATE utf8_general_ci
2、修改数据库表的字符集和排序规则
ALTER TABLE user DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
3、修改数据库表中所有字段的字符集和排序规则
ALTER TABLE user CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
3、修改数据库表中某个字段的字符集和排序规则
alter table user CHANGE username VARCHAR(20) CHARACTER SET utf8 COLLATE 'utf8_general_ci';
三、Sql语句中忽略或区分大小写
修改数据库是一个一劳永逸的方法,但有时候数据库并不是我们能控制的,例如你买的虚拟主机,都是别人设定好的,你没办法去修改,所以只能在sql语句中去想办法了,当然这种方式效率要比修改数据库低,但是通用性强。
注意后面的查询条件一定要用括号括起来,查询条件
1、区分大小
SELECT * FROM user WHERE username LIKE BINARY '%liu%'
或
SELECT * FROM user WHERE username collate utf8_bin LIKE '%liu%'
或
SELECT * FROM user WHERE username collate utf8_general_cs LIKE '%liu%'
2、不区分大小写
//查找姓liu的
SELECT * FROM user WHERE username collate utf8_general_ci LIKE ('liu%')
//按照用户名字母顺序排序,不区分大小写,区分大小写的话换成utf8_general_cs即可
SELECT * FROM user ORDER BY username collate utf8_general_ci asc
当然,你可以根据需要,使用其他的字符集,都是一样的。
但需要注意BINARY 是在like之后,也就是要查询的条件之前,
collate 是在like之前,也就是要查询的字段之后。
随机推荐
- 器物?玩物?
- 推荐本书《人类简史》
- 新发现在新窗口打开链接属性target="_blank"和target="new"竟然是不同的
- 女生想读一个IT专业可以方便就业推荐
- phpMyadmin出现缺少 mcrypt 扩展,请检查 PHP 配置是怎么回事
- 红薯最简吃法
- 网站检测用户浏览器是否安装 AdBlock 类的广告拦截插件的 6 种方法
- 人体增脂暴肥基因解密,吃甜点真有第二个胃?
- Visual Studio Code User 与 Visual Studio Code System的区别及如何选择
- 一饿就出现无力、手抖、心慌,这是怎么回事?
- 彻底屏蔽清除各种2345浏览器、好压等软件广告方法
- 系统的学习Data & Analytics
- Mysql数据库中utf8_bin、utf8_unicode_ci、utf8_general_ci的区别和选择技巧及sql语句强行更改总结
- 同事让人困扰,怎么办?
- PHP正则式eregi 语句改成preg_match语句转为preg_match函数的简单方法
- 男人嘴上说再多“肉麻话”,没有行动,还是算了吧
- 喝茶、牛奶都有益健康,鲜奶茶的营养能好上加好吗?
- 火车头V9开心版提示Exception Processing Message 0xc0000005 Parameters解决方法
- Thinkphp单应用中用中间件处理权限
- 多吃葡萄对眼睛有益!
- 人生路上要善待自己,不凑合,不讨好,不解释
- 内莎玛(小说)
- JS判断google广告被屏蔽弹出对话框
- 人生,需要偶尔停一停!
- 解决win7不支持安装nodejs最新版本的问题
- php函数检测网站页面是否已经被百度收录
- 《《无依之地》的原著小说:《Nomadland: Surviving America in the twenty - First Century》
- 解决phpstudy中的phpmyadmin“缺少 mysqli 扩展 请检查 PHP 配置错误”问题
- Thinkphp查询mysql数据库多个字段是否包含某个词的sql语句
- 神草马齿苋[mǎ chǐ xiàn] ,有多神奇?