我希望确保用JavaScript's sort
method排序的数据的顺序与MySQL的ORDER BY
子句匹配。我在MySQL中使用utf8_general_ci排序规则。
有什么想法吗?
更新:
比较在不使用Compare函数的情况下使用JavaScript的sort
方法时的差异
MySQL:
JavaScript:
换句话说:我需要一个适当的比较函数,可以提供给sort
方法,这样它就可以像utf8_general_ci排序表上的ORDER BY
一样进行排序。
发布于 2018-08-18 06:23:19
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
。
https://stackoverflow.com/questions/51570525
复制相似问题