我有一个排序MYSQL结果的问题..
SELECT * FROM table WHERE something ORDER BY column ASC
列设置为utf8_unicode_ci ..
其结果是我第一次获得具有柱开始波斯尼亚字母,然后在此之后,其他行..
šablabl
šeblabla
čeblabla
aaaa
bbaa
bbb
ccc
MySQL的版本是61年5月1日
我有一个排序MYSQL结果的问题..
SELECT * FROM table WHERE something ORDER BY column ASC
列设置为utf8_unicode_ci ..
其结果是我第一次获得具有柱开始波斯尼亚字母,然后在此之后,其他行..
šablabl
šeblabla
čeblabla
aaaa
bbaa
bbb
ccc
MySQL的版本是61年5月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
这是因为统一的方式制成。 所有“正常”的拉丁字符回来相同的数字对应关系,他们在ASCII过了,之后添加来自其他文化的其他字符。 这意味着,如果你的字母表有其他角色比26级常规ASCII的,它不会出现在统一正确的顺序。
我想你应该尝试改变你的柱核对(也许你将不得不改变字符集也,但也许不是)。
使用中欧整理 。
祝好运 !!
如果这是真的,你看看你发现了一个bug: utf8_unicode_ci
应该考虑s等效于S和C相当于到c!
在任何情况下,这是真的,MySQL不会有很大的支持UTF8归类为中欧语言的: 你只有捷克,斯洛伐克,斯洛文尼亚和 。 如果没有为你的工作,我想你必须创建自己的UTF8归类 ,或使用非Unicode字符集 ,并使用排序规则可用那里。
旧的问题和大量的答案。
也许我处理问题的方式会帮助别人。
我使用的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-collation.html
编辑 :
还有一两件事我注意到:
...那么你最好有整理集合(例如以UTF8),或者你会得到SQL错误,例如:
"Syntax error or access violation: 1253 COLLATION 'utf8_polish_ci' is not valid for CHARACTER SET 'latin1'"
......奇怪,但真