Mysql搜索将欧洲字符解释为非欧洲字符

时间:2019-03-28 11:54:13

标签: mysql

当我搜索包含字母“ 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

1 个答案:

答案 0 :(得分:0)

尝试指定字符集并整理文字:

SELECT * FROM events AS e  
WHERE e.content LIKE _utf8mb4 '%anna%' COLLATE utf8mb4_unicode_ci AND e.id = 1230