【问题标题】:MySQL Swedish Collation and 'é'MySQL瑞典排序规则和'é'
【发布时间】:2018-07-24 17:15:47
【问题描述】:

我有一个 MySQL 数据库,它存储瑞典语字符(虽然不是 PK 的一部分),并且对这些字符进行选择。

我对这类东西没有太多经验,但我之前将排序规则设置为“utf16_swedish_ci”,这似乎已经工作了很长时间并且能够区分相似的字符(比如ä vs a 和 é vs e) 在 select 语句中。

不过,最近,我注意到使用该排序规则似乎总是认为 é 和 e 相同(尽管它似乎可以很好地区分所有其他类似的瑞典语字符)。

在较新版本的 MySQL 中是否发生了一些变化?还是应该一直如此,直到现在我才注意到?我应该使用什么排序规则来唯一标识所有不会有任何奇怪副作用的瑞典字符?

提前致谢!

【问题讨论】:

    标签: mysql internationalization collation


    【解决方案1】:

    åäö 是瑞典本土字母表的一部分,不需要任何特殊处理。但是,é 不是原生的,它依赖重音规则进行排序。

    据我所知,要在 MySQL 中获得区分重音的排序规则,您需要使用其中一种二进制排序规则 - 例如 utf16_bin,不幸的是它也是区分大小写的。

    您使用的是哪个版本的MySQL,您最近是否更新到了较新的版本?如果您有,那么回滚到以前的版本可以解决您的排序规则问题。我知道 8.x.x 版中包含的排序规则发生了一些变化,所以也许这就是您所遇到的。

    【讨论】:

    • 感谢您的回复!我正在使用的 MySQL 服务器位于托管环境中,我对版本控制没有太多控制,但我会看看我是否可以确定当前版本以及它最近是否更新。
    • SELECT @@version;
    【解决方案2】:

    在大多数(包括swedish_ci)utf8 或utf8mb4 排序规则中E=é。例外:_bin_icelandic_ci。见http://mysql.rjweb.org/utf8_collations.htmlhttp://mysql.rjweb.org/utf8mb4_collations.html

    请注意,大多数排序规则都以_ci 结尾,这意味着 大小写折叠并且(大部分)忽略重音符号。

    不要使用 utf16 或 utf32;仅使用 utf8/utf8mb4。

    MySQL 没有区分大小写和重音的排序规则。

    排序规则中唯一不兼容的更改是在 5.0 中与德语 ß。这是一场惨败。 MySQL 永远不会再更改排序规则——尽管它可能会添加新的排序规则。

    【讨论】:

    • 感谢您的信息。所以,如果我理解正确,我必须区分重音字符的唯一选择是使用 _bin 排序规则,然后处理区分大小写?
    • @PAULUS - 最新的 8.0 版本有一些 _as_ci 排序规则。升级,看看这些是否适合您的应用程序。
    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 2011-11-14
    • 2011-11-15
    • 1970-01-01
    • 2012-01-19
    • 2012-10-26
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多