hsqldb脚本文件的唯一约束违例激活(未读取空格字符)

时间:2016-08-30 14:13:20

标签: java sql hsqldb

我正在尝试使用其脚本文件重新创建和读取HSQL数据库。在其中一个表格中,我在一对列上有唯一约束。 某些数据行包含其中一个列的重复字段,但末尾有一个空格。例如:' Java'和' Java'
所以基本上它们形成了两个不同的数据集,但是hsql报告了这两个数据集的**完整性约束违规**错误
数据库由使用HSQLDB的应用程序在内部构成,因此我无法修改脚本文件。 (虽然我试图通过替换unicode字符来测试空间角色,但它也没有用。)

有没有办法告诉hsqldb将空格的文本值视为不同的数据集。
注意:我使用Java访问和读取hsql数据库,并且我通过HSQLDB的嵌入式swing GUI管理器测试了脚本文件,结果在两种情况下都是相同的。

1 个答案:

答案 0 :(得分:2)

您的问题有两种选择:

  • 该列被声明为CHAR:SGBD将使用空格填充trailling空间,因此两个String将相等,您无法更改它。
  • 该列声明为VARCHAR:默认情况下,HSQL将使用空格PAD填充最短的String以匹配第二个String的大小,然后进行比较。所以最后两个字符串在你的情况下是相等的。

对于案例二,您可以改变hsql的行为。

查看文档,特别是:SET DATABASE COLLATION SQL_TEXT NO PAD

database collation