VARCHAR在Apache Derby中无法正常工作

时间:2010-05-18 15:34:34

标签: java sql derby varchar

我正在this same problem

  

如何将VARCHAR截断为   表字段长度自动输入   Derby使用SQL?

     

具体来说:

     

创建表A(B VARCHAR(2));   插入B值('1234');将   抛出一个SQLException:

     

遇到截断错误   试图将VARCHAR'123'缩小为   长度2。

已经回答:

  

没有。你应该把它砍掉   检查元数据。或者如果你   不想检查元数据   每次,你必须保持两者   您的代码和数据库同步。但   这不是什么大不了的事,这是平常的事   在验证员中练习。

但我的疑问是:是不是VARCHAR假设变量大小以适合数据? apache derby的VARCHAR有什么问题?

2 个答案:

答案 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类型。