MySql:Collat​​ion / charcter设置为“Munchen”返回“München”,同时为“Gøteborg”返回“Göteborg”

时间:2015-11-01 14:39:53

标签: mysql character-encoding collation

我有一个网站,挪威用户应该可以搜索城市名称。 慕尼黑市被储存为“慕尼黑”。 哥德堡市被储存为“哥德堡”。

  1. 使用挪威语键盘的用户在搜索“München”时会输入“Munchen”。 这是因为挪威人不经常使用ü而且会键入u,这是键盘上最接近的字母。

  2. 在搜索“哥德堡”时,他们会输入“Gøteborg”。这是相同的字母,但在挪威语和瑞典语中看起来不同。 这也适用于ä而不是æ的城市。

  3. 整理测试

    ut8_general_ci 慕尼黑将给慕尼黑。 Gøteborg不会给Göteborg

    latin1_swedish_ci 慕尼黑不会给慕尼黑。 Gøteborg将为Göteborg提供服务。

    是否有支持这两种情况的方法/整理?

    我使用mysql 5.6.12

    搜索目的地时,可以在hotels.com找到首选行为。

2 个答案:

答案 0 :(得分:0)

首先,查看collation charts webdsite,您可以在其中查看每个字符等于哪个字段。一行中的人彼此相等。如果您找到了所描述的匹配项的排序规则,那么您就会受到影响。我会看看各种斯堪的纳维亚人,或german ones.

或者,您可以使用所需的权重创建自己的归类到mysql。显然,您可以根据现有的排序规则进行排序。

答案 1 :(得分:0)

My collation chart更紧凑。

在许多(但不是全部)utf8排序规则中,Ø被视为OP之间的字母。在utf8_icelandic_ci和utf8_turkish_ci中同样为ö。 utf8_german2_ci将其视为等于oeœ。其他人认为它等于o

归类的问题在于没有一种归类适用于所有语言。 utf8_unicode_ci和utf8_unicode_520_ci可能是最好的妥协。即便如此,这两者在处理Ø时也有所不同。

ä=æ仅适用于utf8_german2_ci。斯洛伐克将ä视为单独的一封信;其余的人说ä=a

如果你想要西欧以外的名字,你不应该使用latin1。

没有归类会处理Gothenburg = Göteborg。所以,你真正需要的是一张备用拼写表。使用该表,您可以解决挪威人等问题(更糟糕的是,美国人。)