【问题标题】: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”等明显的解决方法之外,我还能做些什么来获得一致的响应?

【问题讨论】:

    标签: java database h2


    【解决方案1】:

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

    SELECTIVITYcolumn definition 的一部分。来自H2 documentation

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

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

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


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

    【讨论】:

    • 哇,这在 4 年前会很有帮助 :)。谢谢你,但每当这种情况再次发生时,我会确切地知道该怎么做!
    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多