mysql安装后配置数据库字符集为utf8mb4

6次阅读

mysql启动前须修改配置文件,linux为/etc/my.cnf等,windows为my.ini;必须在[client]、[mysql]、[mysqld]段统一配置utf8mb4,重启后用show variables验证四项字符集全为utf8mb4;旧库表需手动alter转换。

mysql安装后配置数据库字符集为utf8mb4

MySQL 启动前必须修改的配置文件位置

Linux 下通常是 /etc/my.cnf/etc/mysql/my.cnfmacos 用 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 项必须全为 utf8mb4character_set_clientcharacter_set_connectioncharacter_set_databasecharacter_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

text=ZqhQzanResources