hsqldb 脚本文件的 Unique Constraint Violation 异常(未读取 Space 个字符)
Unique Constraint Violation excpetion with hsqldb script file (Space chracters not read)
我正在尝试使用脚本文件重新创建和读取 HSQL 数据库。在其中一个表中,我在一对列上有一个 Unique Constraint。
一些数据行包含其中一列的重复字段,但末尾有 space。例如:'Java' 和 'Java '
所以基本上它们形成了两个不同的数据集,但是 hsql 报告了这两个数据集的**完整性约束违规**错误。
数据库是由使用 HSQLDB 的应用程序在内部形成的,因此我无法修改脚本文件。 (尽管我尝试通过将 unicode 字符替换为 space 字符来进行测试,但它也没有用。)
有什么方法可以告诉 hsqldb 将带有 space 的文本值视为不同的数据集。
注意:我使用Java访问和读取hsql数据库,我还通过HSQLDB的嵌入式swing GUI管理器测试了脚本文件,两种情况下的结果都是一样的。
您的问题有两种选择:
- 该列声明为 CHAR:SGBD 将用 space 尾随 space 填充,因此两个字符串将相等,您无法更改它。
- 该列声明为 VARCHAR:默认情况下,HSQL 将完成 space PAD 最短字符串以匹配第二个字符串的大小,然后比较它。所以最后两个字符串在你的情况下是相等的。
然而,对于第二种情况,您可以更改 hsql 的行为。
查看文档,特别是:SET DATABASE COLLATION SQL_TEXT NO PAD
我正在尝试使用脚本文件重新创建和读取 HSQL 数据库。在其中一个表中,我在一对列上有一个 Unique Constraint。
一些数据行包含其中一列的重复字段,但末尾有 space。例如:'Java' 和 'Java '
所以基本上它们形成了两个不同的数据集,但是 hsql 报告了这两个数据集的**完整性约束违规**错误。
数据库是由使用 HSQLDB 的应用程序在内部形成的,因此我无法修改脚本文件。 (尽管我尝试通过将 unicode 字符替换为 space 字符来进行测试,但它也没有用。)
有什么方法可以告诉 hsqldb 将带有 space 的文本值视为不同的数据集。
注意:我使用Java访问和读取hsql数据库,我还通过HSQLDB的嵌入式swing GUI管理器测试了脚本文件,两种情况下的结果都是一样的。
您的问题有两种选择:
- 该列声明为 CHAR:SGBD 将用 space 尾随 space 填充,因此两个字符串将相等,您无法更改它。
- 该列声明为 VARCHAR:默认情况下,HSQL 将完成 space PAD 最短字符串以匹配第二个字符串的大小,然后比较它。所以最后两个字符串在你的情况下是相等的。
然而,对于第二种情况,您可以更改 hsql 的行为。
查看文档,特别是:SET DATABASE COLLATION SQL_TEXT NO PAD