【问题标题】:how-to query mysql utf-8 table using ASCII如何使用 ASCII 查询 mysql utf-8 表
【发布时间】:2015-05-12 08:09:26
【问题描述】:

我创建了一个 mysql 5.6 表,其中包含以 utf-8 编码的列,用于 罗马尼亚语、捷克语、匈牙利语、波兰语、法语、德语、斯堪的纳维亚语语言的字符 - 即欧洲字符,但完全非ASCII。

但是,我想仅使用 ASCII 字符查询此列 - 例如在 LIKE 子句中 - 以便使用 a,e,i,o,你,s,t等

这可能吗?

【问题讨论】:

    标签: mysql encoding utf-8


    【解决方案1】:

    有一张备忘单,用于了解在utf8 collations 中的哪些排序规则下哪些字母映射“相等” 它同意Ł 没有映射到L 的任何排序规则。 general_ci 在Z 之后排序; utf8_unicode_520_ci 与 L 排序;其余的排序在M之前。

    polish_ci 将Ę 与其他类似E 的字符区别开来。 Ą 同上。波罗的海国家倾向于将某些重读辅音分开。

    在polish_ci 中,Ń(十六进制C584)在N 之后和O 之前进行排序;其他排序规则将其视为等于N。

    utf8_unicode_520_ci 可能是最适合您的排序规则。

    另外,您可能会考虑“组合”重音符号——将两个 utf8 '字符'“组合”成一个字符。 utf8_unicode_ci 对它们中的大多数都“正确”整理,如 here 所示。

    【讨论】:

      【解决方案2】:

      嗯,我认为仅使用 SQL 的任何传统方式都无法实现。 您只能编写查询预处理器,它将自动将 ascii 字符替换为欧洲字符。 https://php.net/manual/en/function.str-replace.php - 假设您使用的是 PHP 但是您仍然需要将每个查询都提供给它。

      【讨论】:

        【解决方案3】:

        我找到了我的问题的部分答案:

        如果您为列定义的字符集是 utf8_general_ci,那么 a,e,o,uflavors /strong> 将通过使用 plain a,e,o,u 的查询找到。 我什至在 Wołoszyńska 使用 plain n.

        找到了 n

        不幸的是,没有找到同一个单词中的小写L“带斜杠”。

        答案是dddd的回答here建议的

        【讨论】:

        • 你也试过utf8_unicode_ci吗?它包含额外的映射(虽然不确定它是否专门涵盖您的 L)。
        • @deceze 不幸的是,它不起作用。我注意到“重要网站”不使用它,而是使用普通的 L。
        猜你喜欢
        • 1970-01-01
        • 2014-03-07
        • 2016-05-02
        • 1970-01-01
        • 1970-01-01
        • 2017-07-11
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多