MYSQL 61年5月1日的排序为utf8的中欧语言(MYSQL 5.1.61 sorting fo

2019-10-17 08:14发布

我有一个排序MYSQL结果的问题..

SELECT * FROM table WHERE something ORDER BY column ASC

设置为utf8_unicode_ci ..

其结果是我第一次获得具有开始波斯尼亚字母,然后在此之后,其他行..

šablabl
šeblabla
čeblabla
aaaa
bbaa
bbb
ccc

MySQL的版本是61年5月1日

Answer 1:

BGI是正确的。 您需要使用适当的排序规则。 不幸的是,MySQL没有一个中欧Unicode排序呢。 MariaDB的 ,MySQL的叉子由MySQL的创作者被维持, 确实 。

所以,你可以从你的UTF8文本转换为拉丁文2,然后用中欧整理顺序排序。 例如。

  SELECT * 
    FROM tab
ORDER BY CONVERT(text USING latin2) COLLATE latin2_croatian_ci

看到这个小提琴: http://sqlfiddle.com/#!2/c8dd4/1/0



Answer 2:

这是因为统一的方式制成。 所有“正常”的拉丁字符回来相同的数字对应关系,他们在ASCII过了,之后添加来自其他文化的其他字符。 这意味着,如果你的字母表有其他角色比26级常规ASCII的,它不会出现在统一正确的顺序。

我想你应该尝试改变你的柱核对(也许你将不得不改变字符集也,但也许不是)。

使用中欧整理 。

祝好运 !!



Answer 3:

如果这是真的,你看看你发现了一个bug: utf8_unicode_ci应该考虑s等效于S和C相当于到c!

在任何情况下,这是真的,MySQL不会有很大的支持UTF8归类为中欧语言的: 你只有捷克,斯洛伐克,斯洛文尼亚和 。 如果没有为你的工作,我想你必须创建自己的UTF8归类 ,或使用非Unicode字符集 ,并使用排序规则可用那里。



Answer 4:

旧的问题和大量的答案。

也许我处理问题的方式会帮助别人。

我使用的PDO。 我的DB是UTF-8。

首先 - 我的分贝单码(它的相关部分)。 我设置“组名称”为所有连接“UTF-8”。

     $attrib_array = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
     if (DB_HANDLER) 
           $attrib_array[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
       self::$instance = new PDO(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS, $attrib_array);

第二 - 我的排序看起来是这样的 - 整理取决于语言(样品展示抛光):

      ORDER BY some_column COLLATE utf8_polish_ci DESC

为了让事情更精简我用一个恒定的,这是我在郎翻译文件中定义的,所以当文件被上拉,适当的归类常数设置。 当然,我有“utf8_general_ci”为默认值。 例:

      define('MY_LOCALIZED_COLLATE', 'COLLATE utf8_polish_ci');

现在,我的查询(相关部分)如下:

      " ... ORDER BY some_column " . MY_LOCALIZED_COLLATE . " DESC" ;

上述工作在大多数情况下。

如果你缺少整理集,您可以尝试自己添加一个。

有关创建这样设置的更多详细信息-在这里看到: http://dev.mysql.com/doc/refman/5.0/en/adding-collat​​ion.html

编辑

还有一两件事我注意到:

  • 如果你有列表排序在波兰例如
  • 你必须强制适当的归类为分选(如上所述)
  • 并使用如INT列排序向量

...那么你最好有整理集合(例如以UTF8),或者你会得到SQL错误,例如:

"Syntax error or access violation: 1253 COLLATION 'utf8_polish_ci' is not valid for CHARACTER SET 'latin1'"

......奇怪,但真



文章来源: MYSQL 5.1.61 sorting for Central European languages in utf8