MySQL选择字符集和排序规则:utf8mb4 是当前绝大多数新项目的主流选择。
🌍 utf8mb4:主流之选
utf8mb4 是目前最通用、最能"一劳永逸"的字符集。
- 为什么选它?
- 完整支持Unicode :它是真正的UTF-8,支持几乎所有语言字符,包括中文生僻字和 emoji 表情 。而MySQL里老旧的
utf8字符集只是个"阉割版",存不了emoji和部分生僻字。 - 与时俱进:MySQL 8.0+ 已将它设为默认字符集,代表着未来的技术趋势。
- 完整支持Unicode :它是真正的UTF-8,支持几乎所有语言字符,包括中文生僻字和 emoji 表情 。而MySQL里老旧的
⚖️ 排序规则对比
选定字符集后,需要选择合适的排序规则(Collation),它影响字符的比较和排序方式。
对于推荐字符集 utf8mb4,官方推荐和社区实践主要集中在以下几种:
| 排序规则 (Collation) | 特点与适用场景 | 推荐程度 |
|---|---|---|
| **utf8mb4_unicode_ci ** | 遵循Unicode标准的排序规则,对中文按拼音、部首排序更准确;性能足够现代应用。 | ✅ (优先)强烈推荐 |
| utf8mb4_general_ci | 实现简单,速度通常稍快,但中文排序可能不准(如"张"排到"李"前面)。 | ⚠️ 已过时,自MySQL 8.0起已不推荐使用。 |
| utf8mb4_0900_ai_ci | MySQL 8.0+ 的默认排序规则,基于Unicode 9.0标准,最推荐。 | ✅ MySQL 8.0+ 首选 |
| utf8mb4_bin | 二进制排序,严格区分大小写和字符('a'≠'A'),常用于用户名、密码等需精确匹配的字段。 |
⚠️ 特定场景 |
| gbk_chinese_ci | gbk字符集的默认排序规则,适用于专注中文的老项目。 |
⚠️ 特定场景 |
🛠️ 配置与避坑指南
-
数据库配置
-
创建数据库时 :
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -
已有数据库迁移 :分别修改数据库、表和列的字符集。
sqlALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
-
JDBC连接 :确保在JDBC URL中指定了UTF-8编码。
javajdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=UTF-8 -
全局设置 :可在配置文件
my.cnf或my.ini中设置。ini[client] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci