【问题标题】:MySQL and polish wordsMySQL 和波兰语
【发布时间】:2011-03-31 04:45:32
【问题描述】:

我注意到使用 MySQL 的“非英语”(波兰语)字符存在问题。

query "select 'abcde'='ąbćdę'" 返回 "1" 且字符串不等于 ...

你能帮帮我吗? :) 谢谢!!!

【问题讨论】:

    标签: mysql character


    【解决方案1】:

    对于 utf8_general_ci,它们是相等的(除了 ł,它不被 MySQL 视为错误),从 5.6 开始,您还可以使用正确处理所有波兰字符的 utf8_unicode_520_ci。使用 utf8_polish_ci 区分重音字符和非重音字符。

    select 'abcde'='ąbćdę' COLLATE utf8_polish_ci
    >> 0
    

    '不是错误'的演示

    select 'abcde'='ąbćdę' COLLATE utf8_general_ci
    >> 1
    
    select 'abcdel'='ąbćdęł' COLLATE utf8_general_ci
    >> 0
    

    在此处查看错误报告:http://bugs.mysql.com/bug.php?id=9604

    【讨论】:

    • 值得注意的是,在 MySQL 5.6 中,您可以使用 "utf8_unicode_520_ci" 排序规则,它处理 ł 大小写的方式与 utf8_general_ci 处理其他波兰字符的方式相同。
    • 谢谢@bigfun。将此信息添加到答案中
    • 我遇到了类似的问题,şs 被视为相同的值。我已经尝试了许多不同的排序规则,但它们都不起作用。任何想法? here is my question
    • 罗马尼亚人和土耳其人对待 S 的方式不同。波兰语对待 og 这是一张所有字母、重音字母和所有 utf8 排序规则的表格:mysql.rjweb.org/utf8_collations.html。它显示了哪些排序规则对于 ogonek 等具有不同的“字母”。
    【解决方案2】:

    你可以在 MYSQL 查询中将 Ł 替换为 L,将 ł 替换为 l,如下所示:

    SELECT REPLACE(REPLACE('abcdel', 'Ł', 'L'), 'ł', 'l') = REPLACE(REPLACE('ąbćdęł', 'Ł', 'L'), 'ł', 'l') COLLATE utf8_general_ci
    >> 1
    

    从现在开始,所有变音字母都等于它们的非变音字母。

    【讨论】:

      猜你喜欢
      • 2019-07-02
      • 2017-04-11
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      相关资源
      最近更新 更多