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 脚本文件的唯一约束违规异常(未读取空格字符)