当我们将托管在 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语句转换表,但数据仍然没有转换。所以即使在转换后它也会返回乱码。
我将不胜感激任何帮助。