You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL数据库中正确存储转换emoji、法语重音等非ASCII字符

问题根因

你遇到的报错和字符转换异常核心是两个问题:

  • MySQL原生utf8字符集实际为utf8mb3,仅支持最多3字节的字符,无法容纳4字节的emoji,所以第一条SQL转换时会清空包含emoji的行
  • 第二条SQL未指定转换目标字符集为utf8mb4,默认字符集不匹配法语重音字符的编码规则,触发1366错误
前置操作

首先全量备份wp_posts表,避免转换出错导致数据丢失,可执行命令备份:

CREATE TABLE wp_posts_bak AS SELECT * FROM wp_posts;
解决步骤
  1. 先设置当前会话字符集为utf8mb4,避免连接层字符集干扰
SET NAMES utf8mb4;
  1. 临时关闭当前会话的严格SQL模式,避免特殊字符校验阻断转换
SET SESSION sql_mode = '';
  1. 执行正确的全表转码命令,明确指定目标字符集为utf8mb4
UPDATE wp_posts SET post_content = CONVERT(CAST(CONVERT(post_content USING latin1) AS BINARY) USING utf8mb4);
  1. 转换完成后验证数据:法语重音字符、emoji均正常显示后,恢复会话的SQL模式(可选,重启会话也会自动恢复)
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
异常排查补充

如果转换后仍有异常,可以先查询单条包含特殊字符的内容编码,确认原始存储的编码格式:

SELECT HEX(post_content) FROM wp_posts WHERE post_content LIKE '%Noëlle%' LIMIT 1;

如果返回结果中ë对应的编码为C3AB,说明原始数据已经是正确的utf8mb4编码,仅需调整Adminer连接字符集为utf8mb4即可,无需执行转码操作。

后续配置校验
  • 确认Adminer的连接字符集设置为utf8mb4,避免显示层面的异常
  • 检查WordPress配置文件wp-config.php,确保存在以下配置,避免后续新写入数据再次出现编码问题:
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', 'utf8mb4_general_ci' );

内容的提问来源于stack exchange,提问作者TerminalVelocity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:06:07