MySQL比较带有国际字符的字符串

4

我遇到了一个小问题:

SELECT * FROM tableName tn WHERE LOWER(tn.name) = LOWER('place_string_here');

当它完美匹配时,这是可以的:

tn.name = orange_tree

place_string_here = Orange_Tree

但我的问题是:国家字符,例如:

Hästgård

我希望"Hästgård"能够匹配: Hästgård, Hästgard, Hastgård和/或 Hastgard

有没有什么聪明的方法来做到这一点?


1
你正在使用哪种字符集(和排序规则)? - Marian Theisen
1
你看过这篇帖子吗:https://dev59.com/m2035IYBdhLWcg3wQtog - vikingsteve
2个回答

2
你可以使用:
你的查询:
SELECT * 
FROM tableName tn 
WHERE tn.name COLLATE 'utf8_general_ci' = 'place_string_here'

SQLFIDDLExample

VALUES
('Hästgård', 'admin@sqlfiddle.com'),
('Twitter', '@sqlfiddle');

查询:

select id, type
from t
where type COLLATE 'utf8_general_ci' = 'hastgard'

结果:

| ID |     TYPE |
-----------------
|  1 | Hästgård |

0
我在那个字段上使用了latin1_swedish_ci排序规则,导致出错。将排序规则更改为utf8_general_ci("name"字段),它开始正常工作 :-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接