【问题标题】:MySQL collation query resultsMySQL 排序规则查询结果
【发布时间】:2016-12-28 10:45:36
【问题描述】:

有没有人解释一下原因:

SELECT * FROM MY_TABLE WHERE 1 = 1 AND libelle COLLATE latin1_general_ci LIKE '%dég%'

返回 1 条记录(仅带有 é 的记录)同时

SELECT * FROM MY_TABLE WHERE 1 = 1 AND libelle COLLATE latin1_swedish_ci LIKE '%dég%'

返回4条记录(当然包括上面的一条)?

根据MySQL doclatin1_general_ci 是“多语言(西欧)不区分大小写”,所以它不应该管理像 latin1_swedish_ci 这样的口音吗?

谢谢 尼古拉斯

【问题讨论】:

  • 西欧有多种语言。我怀疑它们都与瑞典语有相同的规则。
  • 请显示两个查询的结果
  • 请显示针对不同查询匹配不同的其他值。
  • 你应该考虑从latin1切换到utf8mb4
  • 这里有4条记录:dégradation 降级 降级 降级

标签: mysql collation


【解决方案1】:

我怀疑你误解了什么是排序规则。

排序规则是自然语言(瑞典语、英语、俄语、日语...)中用于确定字典单词顺序的一组规则。在关系数据库中,这用于对数据进行排序(例如ORDER BY 子句)和比较数据(例如WHERE 子句或唯一索引)。举几个例子:

  • 如果您需要按国家/地区英文名称订购,您会得到:

    1. 加拿大
    2. 中国
    3. 哥伦比亚


    但是,在传统的西班牙语中,ch 曾经是一个独立的字母,所以正确的顺序是这样的:

    1. 加拿大
    2. 哥伦比亚
    3. 中国
  • 在瑞典语中,å 是一个单独的字母,因此即使您已经拥有 angström,您也可以拥有像 ångström 这样的登录名。在其他语言中,它们会是重复的,并且是不允许的。

排序规则不是用于显示表情符号和其他 Unicode 字符的东西。这只是编码(ISO-8859-1、UTF-8、UTF-16...随便)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2011-04-19
    • 1970-01-01
    • 2013-05-10
    相关资源
    最近更新 更多