H2 在 MySQL 模式下,内存 DB 对 ORDER BY 的处理方式不同
Posted
技术标签:
【中文标题】H2 在 MySQL 模式下,内存 DB 对 ORDER BY 的处理方式不同【英文标题】:H2 In memory DB treating ORDER BY differently in MySQL mode 【发布时间】:2011-09-27 00:06:09 【问题描述】:我有一个查询,它对包含电子邮件地址的 VARCHAR 列执行ORDER BY
。
如果我点击我的物理 mysql 数据库,它会忽略 ORDER BY
中的大小写。但是,我的 h2 内存数据库尊重大小写。它设置为 MySQL 模式。
有人知道这是为什么吗?
【问题讨论】:
【参考方案1】:在评估数据库中的字符串时区分大小写由排序规则决定。
检查 H2 上的排序规则处理:http://www.h2database.com/html/grammar.html#set_collation
【讨论】:
感谢 OMG。我不明白,他们是说 H2 支持在表或列上设置排序规则,还是在谈论为 jdbc 连接设置排序规则?似乎 H2 不尊重我的列(即 latin1)上的排序规则,而是使用 utf8。【参考方案2】:作为使用排序规则的替代方法,您可以使用 SET IGNORECASE TRUE 禁用区分大小写。这需要在创建表之前完成。
H2 的 MySQL 模式不不区分大小写的原因是:H2 中的兼容模式不会影响事物的持久化方式(否则您无法访问具有不同兼容性的数据库稍后模式,或禁用兼容模式)。区分大小写确实会影响事物的存储方式(特别是索引)。
【讨论】:
【参考方案3】:使用VARCHAR_IGNORECASE
而不是VARCHAR
。
Reference
【讨论】:
以上是关于H2 在 MySQL 模式下,内存 DB 对 ORDER BY 的处理方式不同的主要内容,如果未能解决你的问题,请参考以下文章