当我搜索包含字母“ a”的字符串时,该字母还会匹配包含字母“ä”和“å”的单词。
因此,如果我搜索“ anna”,它将与包含“känna”的文本匹配。如果我搜索“曼达”,则匹配“曼达”。
数据库字符集为:latin1
表格字符集:utf8mb4
我可以通过搜索特定的行和特定的列来对其进行测试:
SELECT * FROM events AS e
WHERE e.content LIKE '%anna%' AND e.id = 1230
那将返回该行(1230)。如果我从该行的“内容”列中删除包含“känna”的行,将没有匹配项。因此,它将基于“ a”的所有欧洲字符也解释为“ä”或“å”。
我该如何纠正?
修改:
好的,这是一个小提琴: fiddle
显示创建表事件的输出:(我删除了一些列):
CREATE TABLE `events` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`content` longtext COLLATE utf8mb4_unicode_ci,
`event_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1242 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
答案 0 :(得分:0)
尝试指定字符集并整理文字:
SELECT * FROM events AS e
WHERE e.content LIKE _utf8mb4 '%anna%' COLLATE utf8mb4_unicode_ci AND e.id = 1230