Mysql -将数据库中的表转换为不同的编码并进行排序-外键约束失败

zysjyyx4  于 2023-02-24  发布在  Mysql
关注(0)|答案(1)|浏览(136)

我有一个MySQL数据库与字符集utfmb4和校对utf8mb4_unicode_ci
不,我注意到这会影响我使用'%grün %'之类的搜索查询。这也会匹配'Grund'。
我发现这种行为是因为我的表/列的字符集和排序。现在我想将表切换到排序utf8mb4_de_pb_0900_ai_ci,以避免错误地选择德语umlaute。
首先,我更改了数据库的默认设置,该设置已被接受

ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_de_pb_0900_ai_ci;

也接受为第一个表设置默认设置

ALTER TABLE tablename CHARACTER SET utf8mb4 COLLATE utf8mb4_de_pb_0900_ai_ci;

但是当我想要将现有数据转换为新设置时,我得到了一个错误

ALTER TABLE tablename  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_de_pb_0900_ai_ci;

外键约束“contraintname_fkey”中的引用列“column 1”和被引用列“id”不兼容。
我可以对每个表都这样做,并且总是得到约束不兼容的错误,因为外表没有被转换。
我发现clever Queries可以生成所有alter语句,但是由于上面描述的错误,我无法执行它们。
有简单的方法吗?

yhived7q

yhived7q1#

您可以在变更表时禁用外键检查。
SET FOREIGN_KEY_CHECKS=0;
... ALTER TABLE查询...
SET FOREIGN_KEY_CHECKS=1;
请记住,排序规则中的AI表示区分重音,这意味着在比较文本时不考虑重音。对于区分重音的排序规则,请使用名称中带有_AS_的排序规则。

相关问题