跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

XAMPP 下将 MySQL 默认字符集修改为 utf8mb4 的操作步骤

MySQL字符集应设为utf8mb4:修改my.ini的[mysqld]段,设character-set-server=utf8mb4、collation-server=utf8mb4_unicode_ci,重启后验证;旧库表需ALTER转换;PHP连接须显式指定utf8mb4 charset。 确认 MySQL 当前字符集配置 直接连上
mysql
命令行,执行:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
重点看
character_set_server
、
collation_server
和
init_connect
的值。XAMPP 默认是
latin1
或
utf8
(注意:MySQL 的
utf8
实际是
utf8mb3
,不支持 emoji 等四字节字符),不能只靠客户端设置掩盖问题。 修改 my.ini 配置文件(Windows) XAMPP 的 MySQL 配置文件路径通常是
C:\xampp\mysql\bin\my.ini
(不是
my.cnf
)。必须在
[mysqld]
段落下添加/修改以下几项:
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake
(可选,强制忽略客户端声明的字符集) 确保没有重复的
default-character-set
(该参数在较新 MySQL 中已废弃,且仅在
[client]
段有效,不影响服务端) ⚠️ 注意:不要在
[client]
或
[mysql]
段写
character-set-server
,它只对服务端生效;也不要漏掉
collation-server
,否则新建数据库默认排序规则仍是
latin1_swedish_ci
。 重启 MySQL 并验证是否生效 用 XAMPP 控制面板停止再启动 MySQL 服务。重启后立刻检查:
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
两个值必须分别是
utf8mb4
和
utf8mb4_unicode_ci
。如果没变,大概率是改错了文件(比如编辑了
mysql\conf\my.cnf
,但实际加载的是
bin\my.ini
),或配置项写在了错误 section 下(如写在
[client]
里)。 另外,已有数据库和表的字符集不会自动升级——它们仍保持创建时的设定。要真正支持 utf8mb4,还需单独执行:
ALTER DATABASE `dbname` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE `tablename` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
PHP 连接时也得同步指定 utf8mb4 即使 MySQL 服务端设好了,PHP 默认仍可能用
utf8
连接。用
mysqli
时,在
mysqli_real_connect()
后加:
mysqli_set_charset($conn, 'utf8mb4');
用 PDO 时,在 DSN 中加上
;charset=utf8mb4
,例如:
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', $user, $pass);
否则
SET NAMES utf8mb4
可能被忽略,尤其在使用持久连接时。 别忘了检查 phpMyAdmin 是否正常显示 emoji——这是最直观的验证方式。如果 phpMyAdmin 页面本身乱码,还要确认其配置文件
config.inc.php
中的
$cfg['DefaultCharset'] = 'utf-8';
(注意这里是 UTF-8,不是 utf8mb4)。 真正麻烦的从来不是改配置,而是旧数据迁移和连接层一致性。一个地方漏掉,就可能存进乱码,或者查不出刚插入的内容。

相关文章