MySQL 字符集与排序规则
理解字符集和排序规则的概念,掌握配置和转换方法。 · 难度:入门 · +15XP
字符集基础
字符集定义了字符的编码方式,如 UTF-8、GBK。排序规则(Collation)定义了字符比较和排序的规则。MySQL 支持多种字符集,推荐使用 utf8mb4 以支持 emoji 等特殊字符。
查看字符集
-- 查看服务器字符集
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
-- 查看数据库字符集
SHOW CREATE DATABASE mydb;
-- 查看表字符集
SHOW TABLE STATUS LIKE 'mytable';
设置字符集
-- 创建数据库时指定
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改表字符集
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改列字符集
ALTER TABLE mytable MODIFY name VARCHAR(100) CHARACTER SET utf8mb4;
常见字符集对比
| 字符集 | 说明 | 最大字节 |
|---|---|---|
| utf8 | 标准 UTF-8,不支持4字节字符 | 3 |
| utf8mb4 | 完整 UTF-8,支持 emoji | 4 |
| gbk | 中文 GBK 编码 | 2 |
乱码问题处理
确保连接、数据库、表、列字符集一致。设置连接字符集:SET NAMES 'utf8mb4'; 或在连接字符串中指定 charset。
-- 测试乱码
CREATE TABLE test_charset (content VARCHAR(100)) CHARACTER SET latin1;
INSERT INTO test_charset VALUES ('中文'); -- 可能乱码
-- 转换
ALTER TABLE test_charset CONVERT TO CHARACTER SET utf8mb4;练习提示
创建一个使用 latin1 字符集的表,插入包含中文和 emoji 的数据,观察乱码,然后转换为 utf8mb4 并修复数据。