【问题标题】:Sorting non-English names with MySQL使用 MySQL 对非英文名称进行排序
【发布时间】:2012-01-03 20:04:44
【问题描述】:

我正在尝试对包含希腊字符的表进行排序。对应英文版的表格正在排序(ASCDESC)就好了,每次点击表格的表头。

我在希腊论坛上进行了搜索,建议的唯一解决方案是使用ORDER BY BINARY。事实上,很多人说使用二进制顺序解决了他们的问题。不幸的是,我的情况并非如此。我知道在德语等语言中存在同样的问题,其中使用变音符号会扰乱顺序,并且通常在具有特殊字符的语言中存在。如果有人知道如何克服这个问题,我将不胜感激。

【问题讨论】:

  • 据我所知,非拉丁语言按其 ASCII(或 Unicode)索引排序,通常应该适用于希腊语等语言。所以我看不出问题出在哪里。你能集中你的问题吗?
  • 我已将您的 php 标签更改为 mysql,因为这与 PHP 无关。另外,你能举一个排序不好的例子吗?只是几个名字。 charset 你的桌子是什么?
  • 问题是我没有得到正确的顺序。例如,以 ,A 开头的单词,即使在希腊语中也是字母表的第一个字母,它们几乎出现在我表格的末尾。我不是 PHP 方面的专家,现在我在想表格的排序规则是否有问题?
  • 这些字段有什么字符集和排序规则?
  • UTF-8 是字符集。 utf8_general_ci 是排序规则。何时将排序规则设置为希腊语,我看到的是问号而不是字母。

标签: mysql sorting non-english


【解决方案1】:

根据a thread on forums.mysql.com,在 MySQL 6.0 中,如果您的表的字符集设置为utf8_general_ci,您可以对希腊名称进行排序。

create table t (s1 char(1) character set utf8 collate utf8_general_ci); 
insert into t values ('Α'),('Β'),('Γ'),('Δ'),('Ε'),('Ζ');
select * from t order by s1;

上面应该返回

+----+ 
| s1 | 
+----+ 
| Α  | 
| Β  | 
| Γ  | 
| Δ  | 
| Ε  | 
| Ζ  |
+----+ 

【讨论】:

  • 我使用的是 MySQL 5.1.53。你建议我升级到最新的?
  • @user926652,它在 MySQL 5.1.x 上不起作用,但在 MySQL 6 上起作用——我只能这么说。你是否应该升级,我不知道。它似乎处于开发的早期阶段,所以它可能不是一个好主意 - 但它会解决 this 问题。
猜你喜欢
  • 2014-06-30
  • 1970-01-01
  • 2011-10-03
  • 2017-05-04
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多