如果需要不同的排序规则,如何有效地对字符串列执行ORDER BY,具体取决于文化?也就是说,来自不同文化的用户的数据存储在同一个表和同一列中,但每个用户自然希望看到它根据它的区域设置进行排序(区域设置当然是已知的并且每个行都是固定的。桌子)。并且表格可能很长,因此列需求和索引不能在应用程序端进行后期处理以进行所需的排序规则(它的数据库任务可以进行繁重的工作,对吧?)。
例如,utf8_general_ci
会产生与utf8_swedish_ci
不同的结果。
虽然我认为问题对任何国际项目都应该是明显的,但我找不到合适的解决方案。我自己只能对以下解决方案进行成像,这些解决方案并不是那么好,我怀疑没有更好的办法可以做到:
现在,如果只有一个可排序的字符串列,但可能有几个。解决这个问题的目的和正确方法是什么?
答案 0 :(得分:1)
只要您使用相同的字符集(在您的情况下为utf8)进行列存储和阅读,您可以在COLLATE some-utf8-collation
子句后使用ORDER BY column-name
:
SELECT * FROM sometable ORDER BY somecolumn COLLATE utf8_swedish_ci
在我的测试中,这产生的排序与德国排序不同:
SELECT * FROM sometable ORDER BY somecolumn COLLATE utf8_german2_ci
嗯,只要数据包含相关字符,例如德国变形金刚üöä。如果没有,你就不会看到差异。
ORDER
子句中的多个列都有自己的COLLATE
术语:
SELECT * FROM sometable
ORDER BY
somecolumn COLLATE utf8_german2_ci,
secondcolumn COLLATE utf8_german2_ci