javascript - 在 JavaScript 中匹配 MySQL 的 utf8_general_ci 排序顺序
问题描述
我想确保用JavaScript 的sort
方法排序的数据顺序与MySQL 的ORDER BY
子句相匹配。我在 MySQL 中使用 utf8_general_ci 排序规则。
有任何想法吗?
更新:
比较我使用sort
不带比较功能的 JavaScript 方法时的差异
MySQL:
JavaScript:
重新表述我的问题:我需要一个可以提供给该方法的适当比较函数,以便它以与utf8_general_ci 排序表sort
相同的方式排序。ORDER BY
解决方案
MySQL 中没有放在acute-o
before的排序规则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
.
推荐阅读
- tensorflow - ValueError:不是 TBLoader 或 TBPlugin 子类:
- python - 创建简单的like按钮
- reactjs - 如何使用 MaterialUi Snackbar 中的相同值使用 setState 重新渲染
- laravel - 从数据库生成模板
- angular - 错误错误:找不到名称为“educationDetails”的控件
- firebase - 文档 ID 上的 Firestore 集合组查询
- linux - 为什么 Git 在同时执行多个实例时会出现错误“资源暂时不可用(代码:11)”?
- html - 菜单栏与内容重叠
- c# - 如何检查场景是否已加载不要再次加载?
- django - 避免使用 Django REST Framework 在多个 SerializeMethodFields 中重复查询