php报错 Unknown collation:utf8mb4_unicode_ci
封面图
•
2025-12-15
•
MySQL
218
0
0
0
在 PHP 中遇到错误信息 `Unknown collation: 'utf8mb4_unicode_ci'`,通常是因为你尝试使用了 `utf8mb4_unicode_ci` 字符集/排序规则,但 MySQL 或 MariaDB 不支持它。这可能发生在以下几种情况中: --- ### 🔍 常见原因 1. **MySQL 版本太低**(< 5.5.3): - `utf8mb4` 是从 MySQL 5.5.3 开始引入的。 - 如果你的 MySQL 版本低于这个版本,就无法使用 `utf8mb4` 相关的字符集。 2. **数据库或表使用了 `utf8mb4_unicode_ci`,但实际不支持**: - 比如你在创建表时指定了 `CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`,但 MySQL 实际上不支持该排序规则。 3. **PHP 的 PDO 或 MySQLi 配置问题**: - 如果连接时设置了 `charset=utf8mb4`,而数据库不支持,也可能导致报错。 --- ### ✅ 解决方法 #### 方法一:升级 MySQL / MariaDB 如果你使用的是较旧的 MySQL 版本(例如 5.1、5.5 之前),请考虑升级到 **MySQL 5.5.3+** 或更高版本,或者使用 **MariaDB 5.5+**。 --- #### 方法二:改用 `utf8mb4_general_ci` 或 `utf8_unicode_ci` - `utf8mb4_unicode_ci` 和 `utf8mb4_general_ci` 是不同的排序规则。 - 如果你不能升级 MySQL,可以尝试将排序规则改为 `utf8mb4_general_ci`,它更兼容。 示例修改表结构: ```sql ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` --- #### 方法三:检查并修改连接参数 如果你是通过 PDO 连接数据库,确保连接字符串中没有设置不支持的字符集。 ```php $pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", $user, $pass); ``` 如果 MySQL 不支持 `utf8mb4`,就会报错。你可以暂时改回 `utf8`: ```php $pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", $user, $pass); ``` --- #### 方法四:检查 MySQL 支持的字符集 运行以下 SQL 查询查看当前 MySQL 支持的字符集和排序规则: ```sql SHOW CHARACTER SET; SHOW COLLATION; ``` 确认是否有 `utf8mb4` 相关的字符集和排序规则。 --- ### 🧠 补充说明 - `utf8mb4` 是为了支持 **Emoji 和其他 4 字节字符** 而设计的。 - `utf8_unicode_ci` 是旧版的 UTF-8 排序规则,不支持 4 字节字符。 - 如果你不需要 Emoji 或特殊字符,可以继续使用 `utf8` 和 `utf8_unicode_ci`。 --- ### ✅ 总结 | 问题 | 解决方式 | |------|----------| | MySQL 版本太低 | 升级 MySQL 到 5.5.3+ 或使用 MariaDB | | 使用了 `utf8mb4_unicode_ci` | 改为 `utf8mb4_general_ci` 或 `utf8_unicode_ci` | | 连接参数错误 | 检查并修改连接字符串中的字符集配置 | --- 如果你能提供具体的错误代码或 MySQL 版本,我可以给出更精确的建议。欢迎继续提问!
上一篇:
主库添加log-bin-index 参数后,从库报这个错误:Got fatal error 1236 from master when reading data
下一篇:
mysql autocommit介绍
标题录入,一次不能超过6条
留言
评论