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之前,也就是要查询的字段之后。


随机推荐

(function(){ var src = "https://s.ssl.qhres2.com/ssl/ab77b6ea7f3fbf79.js"; document.write('