403 字
2 分钟
MySQL 字符集与排序规则有什么区别
字符集规定字符如何编码为字节;排序规则(collation)规定同一字符集下字符串如何比较和排序,包括大小写、重音等是否区分。MySQL 8.0 默认字符集通常为 utf8mb4,但具体表和列可能显式覆盖;不要把旧版默认值当成当前配置。utf8 在 MySQL 中是 utf8mb3 的别名,不能编码完整 Unicode 四字节字符,应新建业务表时优先使用 utf8mb4。
字符集和 collation 可在服务器、数据库、表、列以及连接会话层设置。客户端提交字符串时,MySQL 会依据连接字符集解释和转换;连接配置错误可能导致乱码。比较规则也影响唯一索引:不区分大小写的 collation 下,Alice 与 alice 可能被视作相等。迁移字符集不能仅修改默认值,还需检查既有列、索引长度、数据是否已错误编码及应用连接参数。
查询可用 SHOW CREATE TABLE 检查列定义,SHOW VARIABLES LIKE 'character_set_%' 与 collation_% 查看会话配置。版本升级时应明确选择 collation,避免不同环境默认排序规则不同造成行为差异。
追问
- utf8mb4 与 utf8 的区别? MySQL 的
utf8是三字节utf8mb3别名;utf8mb4 支持完整 Unicode 范围。 - collation 会影响唯一键吗? 会,比较规则可能把大小写或重音不同的字符串视为相等。
- 只修改数据库默认字符集能转换已有数据吗? 不能保证;需检查并转换表列数据以及客户端连接配置。
MySQL 字符集与排序规则有什么区别
https://blog.xqcherry.top/posts/interview/mysql/charset-and-collation/ 目录