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 的处理方式不同的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别