必须同时配置my.ini的[mysqld]、[client]、[mysql]三段为utf8mb4,重启mysql服务;php连接时显式调用set_charset('utf8mb4')或dsn加charset=utf8mb4;启用php_mysqli.dll或php_pdo_mysql.dll扩展;建库建表需显式指定utf8mb4字符集与排序规则。

Windows 7 下 PHP + MySQL 环境中,utf8mb4 是唯一能完整支持 Emoji 和四字节 UTF-8 字符的字符集;但直接在 my.ini 里写 utf8 或漏配客户端/服务端/连接层三者之一,就会导致存入乱码、查询截断、PHP mysqli 报错 Incorrect string value。
my.ini 中必须同时配置 server、client、mysql 三段
MySQL 5.5.3+ 支持 utf8mb4,但默认只生效于服务端([mysqld]),而客户端连接、命令行工具、PHP 驱动默认仍走 latin1 或 utf8(即 MySQL 的阉割版 utf8,最多三字节)。不统一这三层,等于白配。
-
[mysqld]段必须包含:character-set-server = utf8mb4和collation-server = utf8mb4_unicode_ci -
[client]段必须包含:default-character-set = utf8mb4 -
[mysql]段必须包含:default-character-set = utf8mb4 - 注意:不要写
utf8—— MySQL 的utf8实际是utf8mb3,不兼容 Emoji
PHP 连接 MySQL 时显式设置字符集
即使 my.ini 配对了,PHP 的 mysqli 或 PDO 初始化连接后默认仍用 latin1,必须手动执行 SET NAMES utf8mb4 或等效操作,否则 INSERT/SELECT 会静默失败。
- 用
mysqli:连接后立即调用$mysqli->set_charset('utf8mb4'),不能只靠mysqli_options($link, MYSQLI_SET_CHARSET_NAME, 'utf8mb4')(它不保证生效) - 用
PDO:DSN 中加;charset=utf8mb4,例如:mysql:host=localhost;dbname=test;charset=utf8mb4 - 避免只在 SQL 前加
SET NAMES utf8mb4—— 如果连接复用或长连接,中间可能被重置
PHP 侧 php.ini 中 extension_dir 和扩展启用要匹配
Windows 7 下常见问题是 php_mysql.dll 已废弃,且不支持 utf8mb4;必须用 php_mysqli.dll 或 php_pdo_mysql.dll,否则即使 DSN 写对了,底层也降级到 utf8。
- 检查
php.ini中是否启用了:extension=php_mysqli.dll和/或extension=php_pdo_mysql.dll(去掉前面的分号) - 确认
extension_dir指向正确路径,比如extension_dir = "C:/php/ext",且该目录下确实存在对应 DLL 文件 - 运行
php -m | findstr mysql验证扩展已加载;若无输出,说明扩展没启用或路径错误
建库建表时也要指定 utf8mb4
my.ini 设置只影响新创建的数据库默认字符集,已有库、表、字段不会自动升级。如果旧库用的是 utf8,即使连接层设对了,INSERT 四字节字符仍会报错。
- 新建数据库:使用
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 修改现有库:
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; - 修改表和字段:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 特别注意:
TEXT类型字段长度限制会变(utf8mb4下最大有效长度约 21844 字符),大字段需评估
最容易被忽略的是:MySQL 服务必须重启才能读取 my.ini 新增的 [client] 和 [mysql] 段;而 PHP 侧改完 php.ini 后,Apache/Nginx 服务也必须重启——仅刷新浏览器或重启 MySQL 不够。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











