java - 无法将减号插入具有检查约束的 varchar 列(列 <> '' )

标签 java sql jdbc h2

我有一个 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 数据库中的某种字符串文字运算符吗?如果是,我该如何逃脱?

enter image description here

最佳答案

根据 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/

相关文章:

sql - 如何返回带有排序数据库结果的 ROW_NUMBER() ?

java - 选择数组元素 PostgreSQL

java - 将 unicode 字符串拆分为字符串列表

java - Chrome 中的 Selenium Java 新选项卡 - 无法打开,始终在同一选项卡中打开 URL

sql - 无法将消息发送到 SQL Server 2008 Service Broker : The message type '<message type>' is not part of the service contract

sql - PL/SQL代码中的 bool 变量声明和用法有什么问题?

php - 计算单个查询中另一个表的行数

java - 使用 JDBC 运行查询时出现 SQLException

java - 使用 Hibernate 插入(更新)大量实体的最佳方法是什么?

java - 规则引擎是实现欺诈规则的正确选择吗?