在 Linux 下设置 MySQL 编码(通常指 UTF-8 / utf8mb4),可以从配置文件、数据库、表、连接几个层面来做。下面以常见发行版(CentOS / Ubuntu)和 MySQL 5.7 / 8.0 为例说明。
# CentOS / RHEL
/etc/my.cnf
/etc/my.cnf.d/*.cnf
# Ubuntu / Debian
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
✅ 建议使用
utf8mb4(支持 emoji),而不是旧版utf8
# CentOS
systemctl restart mysqld
# Ubuntu
systemctl restart mysql
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
常见应看到:
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_server utf8mb4
CREATE DATABASE testdb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER DATABASE testdb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
mysql -uroot -p --default-character-set=utf8mb4
jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8mb4
new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", $user, $pass);
❌ 一般不能,需在写入前就设置正确编码。
无需修改,只需确认配置未被覆盖。
utf8mb4 下:
VARCHAR(255) 可能超出索引长度VARCHAR(191) 或使用 innodb_large_prefix=ON如果你愿意,可以告诉我:
我可以给你精准配置方案。