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

MySQL数据库阿拉伯语内容显示异常及服务器字符集调整求助

解决阿拉伯语内容迁移后显示乱码的问题

问题本质

你之前的数据库中存储的内容是UTF-8字节被错误地以Latin1(或其他单字节编码)写入,但Namecheap主机的环境配置(数据库连接、服务器默认编码)刚好完成了反向解码,所以显示正常。迁移到新主机后,编码配置不匹配,导致无法自动解码,直接显示乱码。

解决步骤

1. 先备份数据库

所有操作前必须备份数据库,避免数据丢失。

2. 修复数据的编码错误

因为数据是双重编码的产物(UTF-8 → Latin1存储),需要将其还原为正确的UTF-8:
对每个存在乱码的字段执行以下SQL语句:

UPDATE 你的表名 SET 你的字段名 = CONVERT(CONVERT(CONVERT(你的字段名 USING latin1) USING binary) USING utf8mb4);

原理:先把字段内容从Latin1转成二进制(还原原始的UTF-8字节),再转成完整的UTF-8编码(utf8mb4)。

3. 修正数据库、表、字段的字符集配置

  • 查看数据库默认字符集:
    SHOW CREATE DATABASE 你的数据库名;
    
  • 查看表的字符集:
    SHOW CREATE TABLE 你的表名;
    
  • 查看字段字符集:
    SHOW FULL COLUMNS FROM 你的表名;
    

确保数据库、表、字段的字符集均为utf8mb4,排序规则为utf8mb4_unicode_ci。如果之前是latin1,修复数据后再修改字符集:

-- 修改数据库字符集
ALTER DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改表字符集
ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4. 确保数据库连接的字符集正确

之前的代码存在参数缺失问题,正确的PHP连接字符集设置应该是:

// 假设$con是你的mysqli连接对象
mysqli_set_charset($con, 'utf8mb4');
// 或面向对象写法
$con->set_charset('utf8mb4');

注意使用utf8mb4而非utf8,因为MySQL的utf8仅支持部分Unicode字符,utf8mb4才是完整的UTF-8实现。

5. 调整MySQL服务器默认编码(可选,但推荐)

如果新主机的MySQL默认编码为latin1,修改MySQL配置文件(如my.cnf或my.ini):

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[client]
default-character-set = utf8mb4

修改后重启MySQL服务。

6. 确认网页编码声明

在HTML头部添加编码声明,确保浏览器以UTF-8解析页面:

<meta charset="UTF-8">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:05:15