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 是啥意思的主要内容,如果未能解决你的问题,请参考以下文章