我在 MySQL 版本 8 上有一个架构,我应该将它迁移到 MariaDB 版本 10.3。(带Mysqldump)
Schema 具有Charset = utf8mb4
和collation = utf8mb4_general_ci
MariaDB 服务器具有默认Charset = utf8
和collation = utf8_general_ci
当我尝试导入转储时,由于错误是不可能的:
Unknown collation: utf8mb4_general_ci
我从这里找到了一个解决方案: https ://stackoverflow.com/questions/42385099/1273-unknown-collation-utf8mb4-unicode-520-ci
它奏效了。但我想知道:
第一:这些差异会导致导入dmp数据后数据丢失吗?
第二:这些差异会导致我的新服务器上的输出或排序有任何差异吗?
- 我在 MariaDB 服务器上有一些其他模式,我不能(也不想!)更改默认字符集和排序规则)
首先,我不建议回到二十年前 Charset = utf8 和 collation = utf8_general_ci
utf8
将丢失您所有的表情符号和一些汉字。加上很多东西会比较不同。相反,请使用 MariaDB 中的“最佳可用”...
您确实有问题,但您的问题的标题不是正确的问题。
这是因为 MySQL 实现了一些
COLLATIONs
MariaDB 尚未实现的功能。两个数据库都处理字符集
utf8mb4
。所以,编码不是问题。排序规则可能是一个小问题或一个大问题。
utf8mb4_unicode_520
。它与 不同utf8mb4_general_ci
,但很接近。PRIMARY KEY
或UNIQUE
键的问题。它可能显示为“重复键”。你的问题 -
数据丢失——不(假设 utf8mb4),除非你得到一个 dup 密钥,这会导致插入行失败。
输出的差异——(同样,不太可能)——由于排序规则的变化,各种重音和特殊字符可能会有所不同。
我的图表显示 520 和 0900 之间没有排序规则差异,但该图表仅涵盖 UTF-8 字符的一小部分。(与 utf8_general_ci有很多不同。)
不可以。MariaDB 10.3 支持 UTF8MB4。
是的。根据 COLLATION 进行比较和排序。所以比较可能会产生另一个结果,因此,另一个输出,排序可能会产生另一个行排序。