ilike搜索工作不规则与字符“ÅÄÖ”

时间:2010-11-10 13:20:20

标签: mysql

好吧,所以我有一个非常奇怪的错误。

说我有字符串“ÖnÅsaÄppleföllnerssjön”

query      |result
Ön         |Found
ÖN         |Found
ön         |Found
<same pattern works with Åsa and Äpple as well>

föll       |Found
Föll       |Found
FÖLL       |Not found

这对我没有任何意义。清楚地搜索首都ÅÄÖ的作品,但出于某种原因,当ÅÄÖ字符不是单词的第一个字母时?

我有一个Rails应用程序和一个MYSQL数据库。 这是相应的代码:

dataset = DB[category_class.table_name.to_sym]
    dataset = dataset.where(:headline.ilike("%" + headline + "%")) if headline.present?

我非常感谢任何能够帮助我找到解决问题的正确方向的评论或答案。

问候,埃米尔

1 个答案:

答案 0 :(得分:0)

这可能与utf8_unicode_ci排序规则比较字符串的方式有关。 排序规则是一组规则,用于确定两个字符串何时被视为“相同”,何时不是;它还确定了字符串的排序顺序。

要查看utf8字符集的排序规则,请发出SHOW COLLATION LIKE 'utf8'。您将看到有各种特定于语言的排序规则。这些不限制您可以存储在列*中的值,而是强制针对预期主要使用特定语言的文本定制的字符串比较规则。或者,您可以使用完全忽略重音的utf8_general_ci归类。

*虽然如果涉及唯一密钥,它们可能会改变一个值是否被认为是另一个值的重复。