如何将VARCHAR截断为 表字段长度自动输入 Derby使用SQL?
具体来说:
创建表A(B VARCHAR(2)); 插入B值('1234');将 抛出一个SQLException:
遇到截断错误 试图将VARCHAR'123'缩小为 长度2。
已经回答:
没有。你应该把它砍掉 检查元数据。或者如果你 不想检查元数据 每次,你必须保持两者 您的代码和数据库同步。但 这不是什么大不了的事,这是平常的事 在验证员中练习。
但我的疑问是:是不是VARCHAR假设变量大小以适合数据? apache derby的VARCHAR有什么问题?
答案 0 :(得分:3)
不,你所描述的与此无关:varchar不会填充空格,char会填充空格
所以,如果你有
CREATE TABLE A ( B VARCHAR(20) ); INSERT INTO A B VALUES ('1234')
它将使用4个字节而不是20个字节,但是你不能在该列中插入超过20个字符,要么在插入之前检查,要么使用像LEFT(val,2)这样的函数
但是,您再次不想知道您的数据不适合并被截断。毕竟最重要的是你的数据...如果你的数据有问题,你什么都没有
在SQL Server中,您可以使用一个设置,它将为您执行此操作,请参阅Suppress string or binary data would be truncated messages with the ANSI WARNINGS setting
基本上你需要SET ANSI_WARNINGS OFF,但我不知道这是否适用于你的数据库
答案 1 :(得分:3)
VARCHAR类型是可变长度,但您在其定义中提供的数字是最大您允许的字符数。
VARCHAR(2)
将存储0-2个字符的值,而CHAR(2)
将存储2个字符,无论它实际具有哪些数据。
备注:一旦达到255个字符,请考虑使用TEXT
类型。