我有一个带有varchar列的H2表,其中的检查约束定义如下:
CONSTRAINT my_constraint CHECK (varchar_field <> '')
以下插入语句失败,但在删除约束或插入任何其他不仅仅是减号(“ - ”)的值时成功。
PreparedStatement ps= con.prepareStatement("INSERT INTO my_table (id, varchar_field) VALUES (?, ?);");
ps.setInt(1, id);
ps.setString(2, "-");
ps.executeUpdate();
更新:进一步的测试揭示了我不理解的行为。减号是SQL / H2数据库中的某种字符串文字运算符吗?如果是的话,我该如何逃避呢?
答案 0 :(得分:2)
根据戈德的评论我用H2 1.3.176进行了测试,但我仍然遇到了同样的问题。当我创建一个新的测试数据库时,我没有发现问题。
- &GT;对于新的测试数据库,我没有指定排序规则,但是使用&#34; COLLATION = ENGLISH STRENGTH PRIMARY&#34;创建应用程序数据库。
我真的没想到主要的力量整理会导致('-' = '')
评估为真......我将不得不重新审视几年前我自己的问题:H2 database collation strength: what to choose?。
我再次非常困惑并且不确定我应该使用哪种排序规则。
答案 1 :(得分:1)
如上所述,H2使用java.text.Collator,因此您可以获得与该类相同的结果。例如:
java.text.Collator c = Collator.getInstance();
c.setStrength(Collator.PRIMARY);
System.out.println(c.compare("-", "") == 0);
System.out.println(c.compare("-", " ") == 0);
System.out.println(c.compare("-", "--") == 0);
结果:
true
true
true