Java hsqldb脚本文件的唯一约束冲突执行(未读取空格字符)

Java hsqldb脚本文件的唯一约束冲突执行(未读取空格字符),java,sql,hsqldb,Java,Sql,Hsqldb,我正在尝试使用其脚本文件重新创建和读取HSQL数据库。在其中一个表中,我对一对列有一个唯一约束。 某些数据行包含其中一列的重复字段,但结尾有空格。例如:“Java”和“Java” 因此,基本上它们形成了两个不同的数据集,但hsql报告了这两个数据集的**完整性约束冲突**错误。 数据库是由使用HSQLDB的应用程序在内部形成的,因此我无法修改脚本文件。(虽然我尝试用unicode字符替换空格字符进行测试,但也没有成功。) 有没有办法告诉HQLDB把空间的文本值看作不同的数据集。br> 注意:

我正在尝试使用其脚本文件重新创建和读取HSQL数据库。在其中一个表中,我对一对列有一个唯一约束。 某些数据行包含其中一列的重复字段,但结尾有空格。例如:“Java”和“Java”
因此,基本上它们形成了两个不同的数据集,但hsql报告了这两个数据集的**完整性约束冲突**错误。

数据库是由使用HSQLDB的应用程序在内部形成的,因此我无法修改脚本文件。(虽然我尝试用unicode字符替换空格字符进行测试,但也没有成功。)

有没有办法告诉HQLDB把空间的文本值看作不同的数据集。br>
注意:我正在使用Java访问和读取hsql数据库,并且我还通过HSQLDB的嵌入式swing GUI管理器测试了脚本文件,结果在两种情况下都是一样的。

有两个选项可以解决您的问题:

  • 该列声明为CHAR:SGBD将用空格填充trailling空格,因此这两个字符串将相等,您无法更改此值
  • 该列声明为VARCHAR:默认情况下,HSQL将使用空格填充最短的字符串,以匹配第二个字符串的大小,然后进行比较。因此,在你的例子中,最后两个字符串是相等的
但是,对于第二种情况,您可以更改hsql的行为

查看文档,特别是:设置数据库排序规则SQL\u文本无PAD


有两种方法可以解决您的问题:

  • 该列声明为CHAR:SGBD将用空格填充trailling空格,因此这两个字符串将相等,您无法更改此值
  • 该列声明为VARCHAR:默认情况下,HSQL将使用空格填充最短的字符串,以匹配第二个字符串的大小,然后进行比较。因此,在你的例子中,最后两个字符串是相等的
但是,对于第二种情况,您可以更改hsql的行为

查看文档,特别是:设置数据库排序规则SQL\u文本无PAD