

新闻资讯
技术学院MySQL升级后字符集默认从utf8mb3变为utf8mb4、校对规则变为utf8mb4_0900_ai_ci,需全链路统一配置为utf8mb4并验证emoji插入、多语言查询及重音排序。
MySQL 升级后字符集变化,最常见的是从 utf8(实际是 utf8mb3)自动转为 utf8mb4,或默认 collation 从 utf8_general_ci 变为 utf8mb4_0900_ai_ci。这会导致旧应用插入四字节 emoji、某些生僻汉字时报错(如 Incorrect string value),或查询排序/比较行为不一致。核心不是“回退”,而是统一配置 + 平滑适配。
升级后先执行以下语句,看清真实配置:
SHOW VARIABLES LIKE 'character_set%'; —— 查看服务端默认字符集SHOW VARIABLES LIKE 'collation%'; —— 查看默认校对规则SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'your_db'; —— 查看库级设置SHOW CREATE TABLE your_table; —— 看表和字段是否仍是 utf8 / utf8mb3不建议降级回 utf8,而应主动升级到 utf8mb4 全链路支持:
my.cnf 中明确指定(5.7+ 或 8.0 均适用):[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
即使服务端设为 utf8mb4,若客户端连接未指定,仍可能走默认 latin1 或旧 utf8:
?characterEncoding=utf8mb4&serverTimezone=UTC
$mysqli->set_charset("utf8mb4");
charset='utf8mb4'
--default-character-set=utf8mb4,或在 my.cnf 的 [client] 段配置转换后务必验证三类典型场景:
INSERT INTO t VALUES ('??');)是否成功LIKE '%東%' OR LIKE '%あ%')结果是否完整
体)CONVERT(... USING utf8),需手动改为 utf8mb4