我想确保用JavaScript's sort
method排序的数据顺序与MySQL的ORDER BY
子句匹配。我在MySQL中使用utf8_general_ci排序规则。
有什么想法吗?
更新:
在不使用比较功能的情况下使用JavaScript的sort
方法比较差异
MySQL:
JavaScript:
重述我的问题:我需要一个可以提供给sort
方法的适当比较函数,以便它与utf8_general_ci排序表上的ORDER BY
相同。
答案 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
。