H2 DB 特殊字符排序不正确

H2 DB Incorrect special characters sorting

我正在尝试对我的 h2 数据库中的列数据进行排序,但它不正确。

我认为更改排序规则可能会有所帮助。我尝试以多种方式在数据源 url 中设置排序规则,例如: spring.datasource.url = jdbc:h2:mem:testdb;COLLATION='ENGLISH'

spring.datasource.url = jdbc:h2:mem:testdb;SET COLLATION='EN''

spring.datasource.url = jdbc:h2:mem:testdb;SET COLLATION ENGLISH STRENGTH PRIMARY'

而且我仍然遇到这样的语法错误Syntax error in SQL statement "SET COLLATION 'ENGLISH'[*]"; expected "identifier"; SQL statement: SET COLLATION 'ENGLISH' [42001-200]

我是不是做错了什么?或者有其他方法可以解决我的问题? 提前致谢!

H2 Console 使用简单Array.sort()提供的浏览器排序功能,它们不受H2 排序规则设置的影响。我为此问题创建了一个功能请求: https://github.com/h2database/h2database/issues/2694

URL jdbc:h2:mem:testdb;COLLATION=POLISH 是正确的。您可以测试它是否有效:

SELECT * FROM
    (VALUES 'AAAAAA', 'LLLLLLLLL', 'ZZZZZZ', 'ĄĄĄĄĄĄ', 'ŁŁŁŁŁŁ') T(V)
    ORDER BY V;
> V
> --------- 
> AAAAAA
> ĄĄĄĄĄĄ
> LLLLLLLLL
> ŁŁŁŁŁŁ
> ZZZZZZ

如果没有 POLISH 整理,结果将与您的屏幕截图相同。

所以不经意的解决方法是将 ORDER BY BUILDINGS_NUMBER 附加到您的查询中。

请注意,整理有不同的强度级别。例如,对于 SECONDARY,您可以使用 jdbc:h2:mem:testdb;COLLATION=POLISH STRENGTH SECONDARY。有关详细信息,请参阅文档: https://h2database.com/html/commands.html#set_collation

非常感谢您带来它。 我的连接到 H2 数据库的 Quarkus 应用程序也有类似的问题。添加:

quarkus.datasource.jdbc.url=jdbc:h2:mem:testdb;COLLATION=POLISH

在我的 application.properties 文件中解决了问题,所有 ORDER BY 查询都返回预期结果。