**Z-BlogPHP 带 Emoji 发布失败,核心原因是数据库编码不支持四字节字符(标准 utf8 只支持 3 字节,Emoji 是 4 字节),必须改成 utf8mb4。**
### 一、先备份数据库
操作前务必完整备份,防止出错丢数据。
### 二、修改数据库/表/字段为 utf8mb4(phpMyAdmin)
1. 进入你的 Z-Blog 数据库
2. **改整个库编码**
- 「操作」→ 排序规则:选 `utf8mb4_general_ci`
- 勾选「更改所有表排序规则」→ 执行
3. **关键表字段(必须改)**
- 文章表 `zbp_post`:
`log_Title`、`log_Intro`、`log_Content`
- 评论表 `zbp_comment`:
`comm_Content`
- 模块表 `zbp_module`:
`mod_Content`
- 每个字段:**排序规则 → `utf8mb4_general_ci`**
### 三、SQL 命令(可选,更彻底)
```sql
-- 改库
ALTER DATABASE 你的库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
-- 改表(批量)
ALTER TABLE zbp_post CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE zbp_comment CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE zbp_module CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```
### 四、修改 MySQL 配置(my.cnf / my.ini)
```ini
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
character-set-client-handshake = FALSE
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
```
改完 **重启 MySQL**。
### 五、Z-Blog 配置
打开 `zb_users/c_option.php`,确认:
```php
$option['db_charset'] = 'utf8mb4';
```
没有就加上,有就改成 `utf8mb4`。
### 六、清除缓存、重启服务
- Z-Blog 后台:清空缓存
- 重启 PHP-FPM / Nginx / Apache
- 再测试发布带 Emoji 的文章
### 七、仍失败?排查
- MySQL ≥ 5.5.3(utf8mb4 最低版本)
- 所有相关表/字段都已改 `utf8mb4_general_ci`
- 连接编码确实是 `utf8mb4`
- 插件/安全过滤是否拦截 Emoji
按上面步骤做完,基本都能正常保存 Emoji。
使用SQL命令解决的终极办法如下:
-- 改库 ALTER DATABASE 你的库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; -- 改表(批量) ALTER TABLE zbp_post CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ALTER TABLE zbp_comment CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ALTER TABLE zbp_module CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;


还没有评论,来说两句吧...