【问题标题】:MySQL incorrect order by with UTF8 charactersMySQL 使用 UTF8 字符的顺序不正确
【发布时间】:2013-06-01 00:29:10
【问题描述】:

我有一个带有字段name 的表,它位于utf8_general_ci 中。当我运行这个查询SELECT name FROM users ORDER BY name ASC 时,我得到了一些奇怪的结果。在字母“S”之后是特殊字母“Š”,这是正确的,但在“Š”之后是更多的字母“S”,应该在那之前。除此之外结果都很好。为什么这个顺序是这样的,我应该如何解决它?

【问题讨论】:

  • 如果您也发布一些示例数据会更容易提供帮助。

标签: mysql utf-8


【解决方案1】:

utf8_general_ci 排序规则将字母的所有变体视为相等。如果要将 S 和 Š 视为不同的字母,则必须使用二进制排序规则 (utf8_bin) 或基于国家标准的排序规则(例如 utf8_czech_ci)。

【讨论】:

  • 我使用了 utf8_bin,但它将大写字母与小写字母分开,这不是我需要的。国家标准不会起作用,因为它是一个国际网站。
  • 国际用户希望同时找到所有带重音的字母变体,因此 Š 词与 S 词混合在一起。如果您开始沿着这条路走下去,您会发现您还必须将 N 和 Ñ 分开,将 Ä 排序在 Z 之后,等等...如果通用顺序中的 only 变体将 S 分开还有 Š 你可以定义自己的排序规则,但这有点麻烦:dev.mysql.com/doc/refman/5.6/en/adding-collation.html
猜你喜欢
  • 2014-11-09
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2018-08-21
  • 1970-01-01
  • 2017-09-04
相关资源
最近更新 更多