MySQL 启动前必须修改的配置文件位置
Linux 下通常是
/etc/my.cnf或
/etc/mysql/my.cnf,macOS 用 Homebrew 安装的可能在
/usr/local/etc/my.cnf,Windows 是
my.ini(在 MySQL 安装目录或
C:\Windows\)。只改运行时 SET 不生效,必须写进配置文件并重启 mysqld。
my.cnf 中要加的三类 utf8mb4 配置项
仅设置
character_set_server = utf8mb4不够,客户端、连接、数据库默认值都要对齐,否则新建库/表/连接仍会回退到 latin1 或 utf8。必须同时配置以下部分:
[client]段加
default-character-set = utf8mb4
[mysql]段加
default-character-set = utf8mb4
[mysqld]段加:
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect = 'SET NAMES utf8mb4' skip-character-set-client-handshake = FALSE
验证是否真正生效的 SQL 命令
重启 MySQL 后,用
mysql -u root -p连上去,执行以下语句检查每层是否都对齐:
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';
重点看这 4 项必须全为
utf8mb4:
character_set_client、
character_set_connection、
character_set_database、
character_set_server。如果
init_connect没生效,
character_set_client可能还是
latin1,此时需确认用户是否有 SUPER 权限(否则 init_connect 被跳过)。
已有数据库和表怎么批量转 utf8mb4
配置生效只影响新创建的库和表,老数据不会自动转换。必须手动执行 ALTER:
改库:ALTER DATABASE <db_name> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;</db_name>改表:
ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</table_name>只改某列(如避免全文索引失效):
ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</column_name></table_name>
注意:
CONVERT TO会重建表,大表务必在低峰期操作;若字段含全文索引,需先删索引再重建,否则报错
ERROR 1709 (HY000): Index column size too large。
