根据documentation,字符变量或VARCHAR指定的字符串应该被截断:
如果显式地将值转换为字符变量(n)或字符(n),则超长值将被截断为n个字符而不会引发错误。 (这也是SQL标准所要求的。)
但我无法让它发挥作用。现在文档确实说明了一个人必须明确地"为一个变化的角色投下一个值,所以也许我错过了。下面是一个简单的测试表:
create table test1(
tval character varying(20));
其中以下内容因ERROR而失败:对于类型字符变化(20)
,值太长insert into test1 values
('this is a super long string that we want to see if it is really truncated');
我怎样才能让它发挥作用?
答案 0 :(得分:6)
这不会截断,因为它只是一个任务:
create table test1(tval character varying(20));
insert into test1 values ('this is a super long string that we want to see if it is really truncated');
但这会,因为它是显式演员:
insert into test1 values (CAST('this is a super long string that we want to see if it is really truncated' AS varchar(20)));
要获得截断行为,您必须使用显式强制转换,坦率地说,我希望SQL标准没有指定。
处理此问题的更好方法是明确您想要的内容:
insert into test1 values (left('this is a super long string that we want to see if it is really truncated', 20));