如何使用 SQL 在 Derby 中将 VARCHAR 自动截断为表字段长度?
再具体一点:
CREATE TABLE A ( B VARCHAR(2) );
INSERT INTO A B VALUES ('1234');
会抛出一个 SQLException:
A truncation error was encountered trying to shrink VARCHAR '123' to length 2.
有没有一种简单的方法来抑制这个异常?
不,你应该在检查元数据后把它砍掉。或者,如果您不想每次都检查元数据,那么您必须使代码和数据库保持同步。但这没什么大不了的,这是验证者的常见做法。
您可以在插入之前修剪 varchar。在插入脚本/过程中使用修剪功能。
我对 Derby 不熟悉,但在 MSSQL 中我做了完全相同的事情,使用 trim 来避免截断错误(仅在我不需要完整数据的情况下),增加 varchar 的长度更可取
您可以使用SUBSTR
:
CREATE TABLE A ( B VARCHAR(2) );
INSERT INTO A B VALUES (SUBSTR('1234', 1, 2));
如果您使用准备好的语句:
INSERT INTO A B VALUES (SUBSTR(?, 1, 2));