
mysql中的字符集
- Gavain Juan
- 数据库 , My SQL
- 2024年11月21日
字符集
UTF-8是Unicode的一种实现方式,几乎包含世界上所有字符,方便国际化,通常使用此字符集。
MySQL 中的 utf8 和 utf8mb4
UTF8 一个字符由 1-6 字节组成,但现在使用的字符最长只有 4 个字节。MySQL 中的 utf8 字符集最多只能存储 3 个字节,因此碰到 4 字节的字符就无法存储,这就是为什么 utf8 字符集的字段无法存储 emoji 表情的原因。 utf8mb4 是 utf8 的扩展,它可以存储 4 个字节的字符,因此可以存储 emoji 表情。 如无特殊情况,都应该使用 utf8mb4 字符集,不再使用 utf8 字符集。
排序规则
是否区分大小写
ci(Case Insensitive):这个排序规则表示大小写不敏感的排序。在使用ci排序规则时,大写和小写字母被视为相同,因此在排序字符串时不会考虑它们的大小写差异。例如,字符串 Apple和 apple在使用ci排序规则时会被视为相等。关键字搜索时**A%和a%**搜索的结果一致.
cs(Case Sensitive):这个排序规则表示大小写敏感的排序。在使用“cs”排序规则时,大写和小写字母被视为不同的字符,因此在排序字符串时会严格区分它们的大小写差异。例如,字符串 Apple和apple在使用cs排序规则时会被视为不同。 在创建数据库或表时,可以通过设置 COLLATE关键字来指定特定的排序规则。例如: utf8mb4_0900_ai_ci 名称解析:utf8mb4 是字符集,0900_ai_ci 是排序规则。ci 代表不区分大小写(case-insensitive)。 [[不同数据库中的特性]]
是否区分重音
在某些特定场景下,区分重音是非常重要的。以下是一些需要区分重音的情况:
需要区分重音的场景
- 语言特性:某些语言的词义可能因重音的不同而改变。例如,在法语中,“a”(有重音)和“à”(无重音)是两个不同的词,具有不同的含义。在这种情况下,区分重音是必要的。
- 精确匹配:在某些应用中,用户可能希望进行精确匹配,例如在搜索引擎或数据库查询中,用户输入的内容必须与数据库中的内容完全一致,包括重音。
- 文化和语言敏感性:在处理某些文化或语言时,重音可能会影响到用户的体验和理解,因此需要特别注意。
区分重音的排序规则
如果你需要在 MySQL 中区分重音,可以使用以下排序规则:
- utf8mb4_0900_as_cs:这个排序规则表示:
- as:区分重音(Accent Sensitive)
- cs:区分大小写(Case Sensitive)
- utf8mb4_general_ci:虽然这个排序规则是不区分重音的,但如果你需要更细致的控制,可以考虑使用 utf8mb4_unicode_ci,它在某些情况下会更准确地处理重音,但仍然是不区分重音的。
- utf8mb4_unicode_as:如果你使用的是 MySQL 8.0 或更高版本,可以使用 utf8mb4_unicode_as,它支持区分重音。
示例
如果你想要创建一个表并使用区分重音的排序规则,可以使用以下 SQL 语句:
CREATE TABLE example (
name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs
);
在这个表中,name 列将区分重音和大小写。
规则解析
utf8_general_ci
- 表示一种通用的排序规则。general 排序规则在比较字符时,采用了一些简化的规则,通常不会考虑重音符号(如 é 和 e 被视为相同),并且在比较时也不区分大小写(例如,A 和 a 被视为相同)。
utf8mb4_0900_ai_ci
- mysql8之后默认的字符集排序规则版本
- 0900:表示使用 Unicode 9.0 版本的字符集。
常见字符集
utf8mb4_general_ci :不区分大小写, 校对速度快, 但准确度稍差,不区分重音。 通常可以选用 utf8mb4_bin::字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容。 utf8mb4_unicode_ci:不区分大小写, 校准确度高,但校对速度稍慢。,区分重音

