我有一个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语句,但是由于上面描述的错误,我无法执行它们。
有简单的方法吗?
1条答案
按热度按时间yhived7q1#
您可以在变更表时禁用外键检查。
SET FOREIGN_KEY_CHECKS=0;
... ALTER TABLE查询...
SET FOREIGN_KEY_CHECKS=1;
请记住,排序规则中的AI表示区分重音,这意味着在比较文本时不考虑重音。对于区分重音的排序规则,请使用名称中带有_AS_的排序规则。