COLLATE中的_ci,是Case Insensitive的缩写,即忽略大小写。COLLATE中的_cs,是Case Sensitive的缩写,即区分大小写。查看mysql中所支持的所有COLLATE。在国内比较常用的三种:utf8mb4_general_ci(默认)、utf8mb4_unicode_ci、utf8mb4_bin;utf8mb4_general_ci(默认)、utf8mb4_unicode_ci、utf8...
2020-12-23 Mysql 中的COLLATE
推荐书籍:
mysql> show full columns from task;
collation中的utf8_unicode_ci是啥?
这是COLLATE的值
在mysql中VARCHAR、CHAR、TEXT等字符类型的列,都需要有COLLATE类型来确定mysql如何对该列进行排序和比较。
utf8_unicode_ci:用来排序的规则。
COLLATE会影响到ORDER BY语句的顺序;WHERE条件中>、< 筛选的结果;GROUP BY、DISTINCT、HAVING语句的查询结果;mysql建索引时,如果索引列是字符类型,也会影响索引创建。
mysql中utf8和utf8mb4两种编码的区别
建议mysql中只使用utf8mb4,不要再使用utf8。这是mysql的一个遗留问题,mysql中的utf8最多只能支持3bytes长度的字符编码,对于部分需占据4bytes长度的文字,utf8就不支持了。
COLLATE和CHARSET相关,通常每种CHARSET都有多种它所支持的COLLATE,且每种CHARSET都指定一种COLLATE为默认值。
COLLATE中的_ci,是Case Insensitive的缩写,即忽略大小写。
COLLATE中的_cs,是Case Sensitive的缩写,即区分大小写。
查看mysql中所支持的所有COLLATE。
在国内比较常用的三种:utf8mb4_general_ci(默认)、utf8mb4_unicode_ci、utf8mb4_bin;
utf8mb4_general_ci(默认)、utf8mb4_unicode_ci、utf8mb4_bin的区别
utf8mb4_bin:直接将所有字符看作二进制串,然后从最高位往最低位比对。(区分大小写)
utf8mb4_unicode_ci和utf8mb4_general_ci对于中文和英文,没有任何区别。但对于某些西方国家的字母来说,utf8mb4_unicode_ci会比utf8mb4_general_ci更符合语言习惯,general是mysql一个比较老的标准了。
推荐大家:使用utf8mb4_unicode_ci,但对于已经用了utf8mb4_general_ci的系统,也没必要花时间改造。
从mysql 8.0开始,mysql默认的CHARSET已不再是Latin1,改为utf8mb4(参考链接,且默认的COLLATE也改为了utf8mb4_0900_ai_ci。utf8mb4_0900_ai_ci大体上就是unicode的进一步细分,0900指代unicode比较算法的编号,ai表示accent insensitive(发音无关),例如e, è, é, ê 和 ë是一样的。
设置COLLATE可以在示例级别、库级别、表级别、列级别、以及SQL指定。实例级别的COLLATE设置就是mysql配置文件或启动指令中的collation_connection系统变量。
优先级顺序:SQL语句 > 列级别 > 表级别 > 库级别 > 实例级别
在系统设计中,我们要尽量避免系统严重依赖中文字段的排序结果,在mysql的查询中也应尽量避免使用中文作为查询条件。2024-10-01