MySQL 默認字符集 latin1 (ISO-8859-1),中文 GBK/UTF-8 在該字符集下按字節碼排序,導致拼音順序錯亂、大小寫不敏感轉換異常。
-- 建表時指定
CREATE TABLE t (name CHAR(10) BINARY) CHARSET=gbk;
-- 修改現有列
ALTER TABLE t MODIFY name CHAR(10) BINARY;
LIKE 行為變化./configure --with-charset=gbk --with-collation=gbk_chinese_ci
# 或
./configure --with-charset=utf8 --with-collation=utf8_general_ci
character_set_server=utf8mb4、collation_server=utf8mb4_unicode_ci[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
[client]
default_character_set = utf8mb4
[mysql]
default_character_set = utf8mb4
配合應用層連接字符串 SET NAMES utf8mb4,全鏈路統一字符集,徹底解決排序、存儲、顯示亂碼。
CREATE TABLE t (c VARCHAR(10) CHARSET gbk) ENGINE=InnoDB;
INSERT INTO t VALUES ('中'),('國'),('人'),('民');
SELECT * FROM t ORDER BY c; -- 應按拼音序:民、人、國、中
舊版本/快速修復 用 BINARY;新部署/根治 用 utf8mb4 + unicode_ci 運行時配置。避免混用字符集導致隱式轉換與索引失效。