首页 > 解决方案 > 在 JavaScript 中匹配 MySQL 的 utf8_general_ci 排序顺序

问题描述

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

有任何想法吗?

更新:

比较我使用sort不带比较功能的 JavaScript 方法时的差异

MySQL:

JavaScript:

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

标签: javascriptmysqlcollation

解决方案


MySQL 中没有放在acute-obefore的排序规则A,所以我认为这是不可能的。我会建议Javascript是“错误的”。

如需进一步讨论,请提供粘贴的文本,而不是图像。此外,尝试提供相关字符的十六进制 - 来自 Javascript 和来自 MySQL。

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

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

也许

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

添加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.


推荐阅读