hsqldb 数据异常:字符串数据,语句中右截断

Posted

技术标签:

【中文标题】hsqldb 数据异常:字符串数据,语句中右截断【英文标题】:hsqldb data exception: string data, right truncation in statement 【发布时间】:2017-06-01 06:33:22 【问题描述】:

电子邮件表是使用以下命令创建的,目前它有大约 15000 条记录。

Create table emails (id INTEGER, accountid INTEGER, subject varchar(4000), 
sender varchar(100), sentDate TIMESTAMP, status varchar(10))

现在我正在尝试在此表上添加主键。为此,我正在执行

ALTER TABLE emails ADD PRIMARY KEY (ID)

但是这个动作会导致

data exception: string data, right truncation in statement [ALTER TABLE emails ADD 
PRIMARY KEY (ID)]

可能是什么原因?

【问题讨论】:

您的表中的每个id 是否都是唯一的,或者是否存在重复项? @TimBiegeleisen 是的。有一个顺序。 您知道尝试将非唯一列设置为主键会导致问题吗? @TimBiegeleisen。是的。我使用 GROUP BY 子句检查确认没有重复 ID。 【参考方案1】:

原因是在某些行中,VARCHAR 列之一包含的数据比声明的列大小长。

您需要使用 SELECT 来查找最长的字符串,并在必要时使用更长的列定义更改表定义。例如:

SELECT MAX (CHAR_LENGTH(status)) FROM emails

ALTER TABLE emails ALTER COLUMN status SET DATA TYPE VARCHAR(20)

【讨论】:

奇怪的行为。为什么它允许插入比声明大小更长的数据? 需要上报HSQLDB的版本以及插入数据的方式。

以上是关于hsqldb 数据异常:字符串数据,语句中右截断的主要内容,如果未能解决你的问题,请参考以下文章

在 HSQLDB 中截断模式

截断需要太多时间 hsqldb

具有 hsqldb 脚本文件的唯一约束违规异常(未读取空格字符)

sqlserver插入语句报“将截断字符串或二进制数据”怎么解决,怎么回事?

ABAP基础-字符串处理

选择语句上的“字符串数据,右截断”警告