将 charset latin1 中的数据从 MySQL 5.7 迁移到 8.0 时出现问题

问题描述 投票:0回答:0

当我们将托管在 AWS RDS 中的 MySQL 数据库从版本 5.7 升级到 8.0 时,我的公司遇到了一个令人不快的问题。

最初,我们有 MySQL 5.7,之前的开发团队保留了默认的字符集和排序规则。字符集是

latin1
,排序规则是
latin1_swedish_ci
。 PHP 和 Node.JS 应用程序使用此数据库来存储数据,无需任何编码转换。两者都工作正常,存储包含非拉丁字符的数据,例如货币符号和非拉丁语言。

当我们使用 AWS 蓝/绿更新将 MySQL 引擎的版本升级到 8.0 时,问题就开始了。数据保持不变,但所有非拉丁字符开始显示为问号 (????) 或乱码。将字符集更改为

utf8mb4
并将排序规则更改为
utf8mb4_900_ai_ci
无济于事。即使发出命令
SET NAMES utf8
SET NAMES utf8mb4
.

,数据似乎没有变化并且返回乱码

比这更糟糕的是,在将表转换为

utf8
之后,进入客户数据库的数据似乎已损坏(再次出现问号和乱码)。以前保存的数据也变得不可读。 似乎唯一有帮助的是发出命令
SET NAMES latin1
。在那之后,我们得到了大部分数据,但是一些字符,比如欧元符号 (€) 和来自不同语言的其他字符,没有正确存储在数据库中。 奇怪的是 €- 之前存储在 MySQL 5.7 没有问题和
SET NAMES ...
命令。

我看过类似的topics,描述了如何转换表的charset和collation,但问题是我们可以使用SQL语句转换表,但数据仍然没有转换。所以即使在转换后它也会返回乱码。

我将不胜感激任何帮助。

mysql data-conversion iso-8859-1 utf8mb4
© www.soinside.com 2019 - 2024. All rights reserved.