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

如何解决phpMyAdmin中ERROR #1977:无法转换utf8字符0xD8AD为latin1?

解决阿拉伯语乱码及UPDATE转换报错问题

问题分析

你遇到的#1977错误是因为部分字符无法从utf8转换为latin1,导致UPDATE语句中断;而SELECT能正常显示是因为查询仅做临时转换,未触发严格的编码校验。以下是分步解决方案:

步骤1:排查当前字符集状态

先确认表和列的字符集配置,避免后续操作冲突:

SHOW CREATE TABLE guestbook;

重点查看name列的CHARACTER SET参数。

步骤2:批量转换(跳过错误记录)

用IGNORE关键字跳过转换失败的记录,先处理大部分可正常转换的内容:

UPDATE IGNORE guestbook 
SET name = CONVERT(BINARY CONVERT(name USING latin1) USING utf8mb4);

步骤3:定位并处理报错记录

用TRY_CONVERT(MySQL 8.0及以上版本支持)筛选出转换失败的记录:

SELECT id, name, TRY_CONVERT(BINARY CONVERT(name USING latin1) USING utf8mb4) AS converted_name
FROM guestbook
WHERE TRY_CONVERT(BINARY CONVERT(name USING latin1) USING utf8mb4) IS NULL;

对这些记录,采用二进制直接转码的方式处理:

UPDATE guestbook 
SET name = CAST(CAST(name AS BINARY) AS CHAR CHARACTER SET utf8mb4)
WHERE id IN (SELECT id FROM guestbook WHERE TRY_CONVERT(BINARY CONVERT(name USING latin1) USING utf8mb4) IS NULL);

步骤4:统一表与数据库字符集

确保所有配置统一为utf8mb4(支持完整Unicode字符,适配阿拉伯语):

ALTER TABLE guestbook CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER DATABASE alfeker_book CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

步骤5:避免后续乱码问题

确保phpMyAdmin的连接字符集为utf8mb4,可执行以下语句确认:

SET NAMES utf8mb4;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:22:48