这是我可以找到的唯一关于此问题的问答,但似乎没有回答这个问题:Fulltext search with nordic letters (æ, ø, å)
在MySQL中,我有一个名为“ JohnNørbæk”的用户。
我希望能够在搜索时匹配此用户:
“ Noerbaek”,“Nørbaek”或“Noerbæk”
(也可以匹配“ Norbaek”,这很好,但我的Google专家建议ø等于“ oe”而不是“ o”,所以现在要求这样做是错误的。)>
我正在使用utf8mb4_unicode_ci
我在这里创建了一个SQL Fiddle:http://sqlfiddle.com/#!9/b5be3d4/3
我在网上提出的所有结果似乎都与PHP有关,并用str_replace替换了这些字符,但是如果我的数据库中的内容是“Nørbæk”,那就没有帮助了。
我不能做这样的事情,因为匹配的字符串需要在全文索引中:
SELECT * FROM users WHERE MATCH (REPLACE(`name`, 'æ', 'ae'))
AGAINST ('Nørbaek' IN BOOLEAN MODE);
这是可行的,但在搜索“ Michael”之类的内容时当然会失败,因为它将被转换为Michæl,所以这是不可能的。
SELECT * FROM users WHERE MATCH (`name`)
AGAINST (REPLACE('Nørbaek', 'ae', 'æ') IN BOOLEAN MODE);
所以我全无想法,必须有一种更好的方法来匹配这些字符,对吗?
我对可用性更感兴趣。
例如,如果年长的用户想要找到他们的“Nørbæk博士”,他们需要能够输入能够找到他的东西,而不仅仅是告诉他们学习如何键入“ø”。
答案 0 :(得分:1)
如约翰所展示的,
MATCH(col) AGAINST('Nørbæk' ...)
成功
IN BOOLEAN MODE
和IN NATURAL LANGUAGE MODE
。col = 'Norbaek'
,Nørbæk
的其他变体,AGAINST
(或utf8_unicode_520_ci
)。http://mysql.rjweb.org/utf8_collations.html和http://mysql.rjweb.org/utf8mb4_collations.html显示任一字符集的520归类的以下等效类:
utf8mb4_unicode_520_ci
因此,鉴于排序规则,无需进行A=a=ª=À=Á=Â=Ã=Ä=Å=à=á=â=ã=ä=å=Ā=ā=Ă=ă=Ą=ą
ae=Æ=æ
O=o=º=Ò=Ó=Ô=Õ=Ö=Ø=ò=ó=ô=õ=ö=ø=Ō=ō=Ŏ=ŏ=Ő=ő=Ơ=ơ
oe=Œ=œ
;而是为该列指定排序规则(utf8_unicode_520_ci或utf8mb4_unicode_520_ci)