2017-06-01 148 views
0

电子邮件表是使用以下命令创建的,目前它具有大约15000条记录。hsqldb数据异常:字符串数据,语句中的右截断

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)] 

可能是什么原因?

+0

表中的每个“id”都是唯一的,还是可能存在重复? –

+0

@TimBiegeleisen是的。有一个序列。 – Ankur

+0

您是否明白,试图将非唯一列作为主键会导致问题? –

回答

1

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

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

SELECT MAX (CHAR_LENGTH(status)) FROM emails 

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

奇怪的行为。为什么它允许插入比宣称大小更长的数据? – Ankur

+0

您需要报告HSQLDB的版本以及如何插入数据。 – fredt

相关问题