在JavaScript中匹配MySQL的utf8_general_ci排序顺序

时间:2018-07-28 10:39:01

标签: javascript mysql collation

我想确保用JavaScript's sort method排序的数据顺序与MySQL的ORDER BY子句匹配。我在MySQL中使用utf8_general_ci排序规则。

有什么想法吗?

更新:

在不使用比较功能的情况下使用JavaScript的sort方法比较差异

MySQL:

JavaScript:

重述我的问题:我需要一个可以提供给sort方法的适当比较函数,以便它与utf8_general_ci排序表上的ORDER BY相同。

1 个答案:

答案 0 :(得分:1)

MySQL中没有将acute-o放在A之前的排序规则,因此我认为这是不可能的。而且我建议Javascript是“错误的”。

为进一步讨论,请提供粘贴的文本,而不是图像。另外,尝试提供有问题的字符的十六进制-既来自Javascript,又来自MySQL。

SELECT col, HEX(col), LENGTH(col), CHAR_LENGTH(col) FROM ...

并为所涉及的表提供SHOW CREATE TABLE。设置而不是排序规则可能有问题。

也许

可能是Javascript在盲目地比较“字节”,而不是“字符”。这就是急性o(西欧字符)在波兰字符之前出现的方式。另一个测试-在测试用例中添加几个非重音符号。您可能会发现甚至在急性o之前就来了。​​

在测试用例中添加lz将确定lz < ł是否适用于波兰语,而不是utf8_general_ci的工作方式。您应该考虑utf8_polish_ci。演示斜杠-l:

console.log(letterSort('de', ['a','z','ä', 'ł', 'lz', 'l', 'z', 'ó']));
console.log(letterSort('pl', ['a','z','ä', 'ł', 'lz', 'l', 'z', 'ó']));
console.log(['a','z','ä', 'ł', 'lz', 'l', 'z', 'ó'].sort());

> Array ["a", "ä", "l", "ł", "lz", "ó", "z", "z"]
> Array ["a", "ä", "l", "lz", "ł", "ó", "z", "z"]
> Array ["a", "l", "lz", "z", "z", "ä", "ó", "ł"]

在最后一种情况下,请注意所有带重音的字符都在“ z”之后。这可能等效于MySQL的COLLATION utf8_bin