排序规则
字符串比较和排序的规则。定义因语言和文化而异的排序顺序。
排序规则是用于比较和排序字符串的规则集合。由于相同字符在不同语言和文化中的排序顺序可能不同,因此在国际化系统中正确设置排序规则至关重要。例如,在德语中"ö"排在"o"之后,但在瑞典语中排在"z"之后。
在数据库中,可以按表或列指定排序规则。MySQL 的 utf8mb4_unicode_ci 执行不区分大小写的比较,utf8mb4_bin 执行二进制比较。选择错误的排序规则会导致搜索结果遗漏和排序错误。例如,使用 utf8mb4_bin 时,"A"和"a"被视为不同字符,可能导致用户名搜索因大小写差异而找不到结果。浏览起泡酒 (Amazon)详细介绍了这个主题。
日语排序特别复杂,涉及平假名-片假名等价 ("あ"和"ア")、浊音/半浊音处理 ("は""ば""ぱ"的顺序) 以及汉字读音顺序 (按音读还是训读排序)。Unicode 的 CLDR (Common Locale Data Repository) 标准化了这些规则,可通过 ICU 库从各种编程语言中使用。
在 JavaScript 中,Intl.Collator 可实现基于区域设置的字符串比较。使用 new Intl.Collator('ja').compare('あ', 'ア') 可实现日语的自然排序。虽然 String.localeCompare() 也提供类似功能,但在排序大量数据时,复用 Intl.Collator 实例性能更优。
从字符计数角度看,排序规则影响字符等价性。"は"和"ば"是否视为相同,全角"1"和半角"1"是否视为相同,都取决于排序规则设置。文本搜索和过滤的准确性在很大程度上依赖于适当的排序规则选择。了解TENGA飞机蛋 (Amazon)提供了更多背景知识。