具有 hsqldb 脚本文件的唯一约束违规异常(未读取空格字符)
Posted
技术标签:
【中文标题】具有 hsqldb 脚本文件的唯一约束违规异常(未读取空格字符)【英文标题】:Unique Constraint Violation excpetion with hsqldb script file (Space chracters not read) 【发布时间】:2016-08-30 14:13:20 【问题描述】:我正在尝试使用其脚本文件重新创建和读取 HSQL 数据库。在其中一个表中,我在一对列上有一个 Unique Constraint。 一些数据行包含其中一列的重复字段,但末尾有一个空格。例如:“Java”和“Java” 所以基本上它们形成了两个不同的数据集,但是 hsql 报告这两个数据集的**完整性约束违反**错误。 该数据库是由使用 HSQLDB 的应用程序在内部形成的,因此我无法修改脚本文件。 (尽管我尝试通过将 unicode 字符替换为空格字符来进行测试,但它也不起作用。) 有没有办法告诉 hsqldb 将带有空格的文本值视为不同的数据集。 注意:我使用Java访问和读取hsql数据库,并且我通过HSQLDB的嵌入式swing GUI管理器测试了脚本文件,两种情况下的结果都是一样的。
【问题讨论】:
【参考方案1】:您的问题有两种选择:
该列被声明为 CHAR :SGBD 将用空格填充尾随空格,因此两个字符串将相等,您无法更改。 该列被声明为 VARCHAR :默认情况下,HSQL 将使用空格 PAD 完成最短字符串以匹配第二个字符串的大小,然后进行比较。所以最后这两个字符串在你的情况下是相等的。但是,对于情况 2,您可以更改 hsql 的行为。
查看文档,特别是:SET DATABASE COLLATION SQL_TEXT NO PAD
database collation
【讨论】:
以上是关于具有 hsqldb 脚本文件的唯一约束违规异常(未读取空格字符)的主要内容,如果未能解决你的问题,请参考以下文章
HSQLDB:奇怪的“唯一约束或索引违规”,从CSV读取数据
HSQLDB 内存设置的 HSQLDB 约束违规和 SQL 查询日志