我有一个 H2 表,其中有一个 varchar 列,其检查约束定义如下:
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 数据库中的某种字符串文字运算符吗?如果是,我该如何逃脱?
最佳答案
根据 Gord 的评论,我用 H2 1.3.176 进行了测试,但仍然遇到同样的问题。当我创建一个新的测试数据库时,我没有观察到这个问题。
-> 对于新的测试数据库,我没有指定排序规则,但应用程序数据库是使用“COLLATION=ENGLISH STRENGTH PRIMARY”创建的。
我真的没想到主要强度排序会导致 ('-' = '')
评估为 true...我将不得不重新审视几年前我自己的问题: H2 database collation strength: what to choose? .
我再次感到非常困惑,不确定应该使用什么排序规则。
关于java - 无法将减号插入具有检查约束的 varchar 列(列 <> '' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921766/