H2 数据库 - 错误消息中的 SELECTIVITY 是啥意思

Posted

技术标签:

【中文标题】H2 数据库 - 错误消息中的 SELECTIVITY 是啥意思【英文标题】:H2 Database - What does SELECTIVITY mean in ERROR messagesH2 数据库 - 错误消息中的 SELECTIVITY 是什么意思 【发布时间】:2017-10-19 13:01:10 【问题描述】:

我正在使用 H2 进行 Java 单元测试。当通过插入一个太大的值故意调用错误时,我看到来自 H2 的 2 个不同响应:

 Value too long for column "MY_COLUMN VARCHAR(50)"

 Value too long for column "MY_COLUMN VARCHAR(50) SELECTIVITY 20"

在这种情况下,我想了解“选择性”的原因和含义。除了使用“StartsWith”等明显的解决方法之外,我还能做些什么来获得一致的响应?

【问题讨论】:

【参考方案1】:

您现在可能已经想通了,但是我遇到了这个问题,其他人也可能会来这里:

SELECTIVITY 是column definition 的一部分。来自H2 documentation:

选择性描述了列中值的“唯一性”。选择性 100 表示每个值仅出现一次,选择性 1 表示相同值出现在许多或大多数行中。

H2 每个表只能使用一个索引1,但是,如果一个查询可以使用多个索引,则选择性决定使用哪个索引。

因此,在您的情况下,看起来列定义在单元测试之间发生了变化。例如,如果您设置了一个正在为每个测试重新创建的内存数据库,则可能会出现这种情况。


1 此处的文档说明每个连接有一个索引,但如果您没有任何连接,则它只是表的一个索引

【讨论】:

哇,这在 4 年前会很有帮助 :)。谢谢你,但每当这种情况再次发生时,我会确切地知道该怎么做!

以上是关于H2 数据库 - 错误消息中的 SELECTIVITY 是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

postgresql 兼容性中的语法错误 h2 数据库

Mysql兼容的内存数据库中的查询错误(h2)

H2数据库加载csv数据更快

H2 数据库中的错误,同时运行多个测试

Mysql兼容的内存数据库中的查询错误(h2)

H2 和 Microsoft Access