2

我们正在使用 PrimeFaces 2.2(在 Java EE 5 项目中使用 JSF 2.x),并且在 PrimeFaces 数据表中正确排序以特殊字符(例如 İstanbul、Çankaya、Ödemiş...)开头的字符串时遇到了问题,尽管我们正在使用UTF-8。

问题在于,以特殊字符开头的单词被放在以 Z 开头的单词的末尾,而例如,以“İ”开头的城市名称(即 İstanbul)通常应该出现在 Ibiza 和 Jacksonville 之间,而不是结束出现在苏黎世之后。此规则基于土耳其语 (tr_TR) 语言环境。

然而,在 selectOneMenus 中,排序正确执行(并且如上所愿)

任何解决方法的建议将不胜感激。

_ 编辑 _

此问题与基于休眠 (hsql) 的排序有关,而不是基于 sql 的排序

4

3 回答 3

0

除非您知道单词的语言排序顺序,否则无法正确排序。如果单词是混合语言,则没有正确的排序顺序,但是在这种情况下,人们通常会为大多数用户/观众使用语言排序顺序。

完全相同的字符具有完全相同的声音和完全相同的 Unicode 代码点,将根据语言甚至国家/地区在不同的地方进行排序。

这是Unicode排序算法的定义http://unicode.org/reports/tr10/

于 2012-07-20T08:48:38.123 回答
0

区域感知排序是一项棘手的业务,因此最好使用专用库来处理。我建议使用ICU。我无法提供有关如何将其与 hsql 工作流程集成的任何详细信息,因此如果可以选择,我可能会尝试单独对事物进行排序。

于 2012-07-20T11:45:56.647 回答
0

这应该会有所帮助,这里所有内容都在排序之前转换为基本的大写/小写字符

select k from test order by convert(k using utf8_bin)
于 2012-07-20T07:56:47.560 回答