MySQL 字符集与排序规则
深入理解MySQL字符集和排序规则,避免乱码问题,确保数据正确存储和比较。 · 难度:入门 · +15XP
字符集基础
字符集(Character Set)定义字符的编码方式,如UTF-8、GBK。排序规则(Collation)定义字符的比较和排序规则。MySQL中每个字符集都有对应的排序规则。
常用字符集
| 字符集 | 说明 | 推荐场景 |
|---|---|---|
| utf8mb4 | UTF-8完整实现,支持4字节字符(如emoji) | 现代应用首选 |
| utf8 | MySQL的utf8是utf8mb3,不支持4字节字符 | 兼容旧系统 |
| latin1 | 西欧字符集 | 历史遗留系统 |
| gbk | 中文GBK编码 | 国内旧系统 |
查看和设置字符集
-- 查看当前字符集设置
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 设置数据库字符集
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 设置表字符集
CREATE TABLE users (
name VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改现有表字符集
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
排序规则说明
排序规则后缀含义:
- _ci:大小写不敏感(Case Insensitive)
- _cs:大小写敏感(Case Sensitive)
- _bin:二进制比较,最严格
避免乱码的实践
- 统一使用utf8mb4字符集
- 连接时指定字符集:SET NAMES utf8mb4
- 确保客户端、连接、数据库、表、列字符集一致