Java 如何在PrimeFaces数据表中正确排序以特殊字符开头的字符串(如İ;、ı;、Ç;、ç;、Ğ;、ğ;、ş;、ö;、ü;…)?
我们使用的是PrimeFaces 2.2(JavaEE5项目中的w/JSF2.x),尽管我们使用的是UTF-8,但在PrimeFaces数据表中,我们在正确排序以特殊字符开头的字符串(例如İstanbul、İankaya、Ödemiş…)时遇到了问题 问题是以特殊字符开头的单词被放在以Z开头的单词的末尾,而例如,以“İ”(即İstanbul)开头的城市名称通常应该出现在伊维萨和杰克逊维尔之间,而不是出现在苏黎世之后。此规则基于土耳其(tr_tr)地区 但是,在SelectOne菜单中,排序是正确执行的(并且如上所述) 如果您对解决方案有任何建议,我们将不胜感激 编辑Java 如何在PrimeFaces数据表中正确排序以特殊字符开头的字符串(如İ;、ı;、Ç;、ç;、Ğ;、ğ;、ş;、ö;、ü;…)?,java,hibernate,Java,Hibernate,我们使用的是PrimeFaces 2.2(JavaEE5项目中的w/JSF2.x),尽管我们使用的是UTF-8,但在PrimeFaces数据表中,我们在正确排序以特殊字符开头的字符串(例如İstanbul、İankaya、Ödemiş…)时遇到了问题 问题是以特殊字符开头的单词被放在以Z开头的单词的末尾,而例如,以“İ”(即İstanbul)开头的城市名称通常应该出现在伊维萨和杰克逊维尔之间,而不是出现在苏黎世之后。此规则基于土耳其(tr_tr)地区 但是,在SelectOne菜单中,排序是正确
这个问题与基于hibernate(hsql)的排序有关,而不是基于sql的排序。这应该会有所帮助,在排序之前,所有内容都会转换为基本的大写/小写字符
select k from test order by convert(k using utf8_bin)
这应该会有所帮助,在排序之前,所有内容都会转换为基本的大写/小写字符
select k from test order by convert(k using utf8_bin)
除非知道单词的语言排序顺序,否则无法正确排序。如果单词是混合语言,则没有正确的排序顺序,但是在这种情况下,大多数用户/受众通常使用语言排序顺序 完全相同的字符,具有完全相同的发音和完全相同的Unicode代码点,将根据语言甚至国家在不同的地方排序
这是Unicode排序算法的定义,除非您知道单词的语言排序顺序,否则无法正确排序。如果单词是混合语言,则没有正确的排序顺序,但是在这种情况下,大多数用户/受众通常使用语言排序顺序 完全相同的字符,具有完全相同的发音和完全相同的Unicode代码点,将根据语言甚至国家在不同的地方排序
以下是Unicode排序算法的定义,区域设置感知排序是一项棘手的工作,因此最好使用专用库。我建议使用。我无法提供有关如何将其与hsql工作流集成的任何详细信息,因此如果这是一个选项,我可能会尝试单独排序。区域设置感知排序是一项棘手的工作,因此最好使用专用库。我建议使用。我无法提供有关如何将其与hsql工作流集成的任何详细信息,因此如果这是一个选项,我可能会尝试单独排序。语言为土耳其语,区域设置为“tr tr”,排序在selectOneMenu/f中正确完成:selectItems在同一页面上,但是p:dataTable无法正确排序。语言为土耳其语,区域设置为“tr tr”,并且在SelectOne菜单中正确排序/f:selectItems在同一页上,但是,p:dataTable无法正确排序。是否有一种方法可以在Hibernate中测试这一点,而不必执行本机SQL查询?simples方法应该是自定义比较器,并对结果执行Collection.sort。缺点是排序是在java中完成的,而不是在数据库级别。有没有办法在Hibernate中测试这一点,而不必执行本机SQL查询?simples方法应该是自定义比较器,并对结果执行Collection.sort。缺点是排序是在java中完成的,而不是在数据库级别。您找到解决此问题的方法了吗?我遇到了相同的问题。您是否找到解决此问题的方法?我也遇到过同样的问题。