Skip to content

mysql在创建数据库时需要设置字符集(characterset)和排序顺序(collection)

在mysql8中使用utf8mb4作为默认字符集,使用utf8mb4_0900_ai_ci作为默认的collection

utf8和utf8mb4的区别

utf8和utf8mb4的区别是:

  • utf8只能存储3个字节的字符,只包含基本多语言平面(BMP)的字符。
  • utf8mb4可以存储4个字节的字符,支持超出BMP的补充字符,例如表情符号。
  • utf8mb4是MySQL 8.0的默认字符集,而utf8(或utf8mb3)已经被弃用,将在未来的MySQL版本中移除。

因此,建议您使用utf8mb4而不是utf8,以便支持更多的Unicode字符。但是,请注意,使用utf8mb4可能会影响索引的长度和存储空间的使用。

collection中的ai和ci是什么意思

ai表示不区分重音符号(accent-insensitive),ci表示不区分大小写(case-insensitive)。

与之对应的,有as和cs,就是重音敏感和区分大小写

这个重音敏感是这个意思

好的,我来举个例子。假设你有一个表格,里面有一列名字,如下:

name
Anna
Ánna
anna
Bob
bob

如果你使用utf8mb4_0900_ai_ci作为这一列的collation,那么当你查询name='Anna'时,你会得到以下结果:

name
Anna
Ánna
anna

这是因为utf8mb4_0900_ai_ci不区分音调和大小写,所以它认为Anna,Ánna和anna是相同的。

如果你使用utf8mb4_0900_as_cs作为这一列的collation,那么当你查询name='Anna'时,你会得到以下结果:

name
Anna

这是因为utf8mb4_0900_as_cs区分音调和大小写,所以它认为Anna和Ánna,anna是不同的。