Postgresql没有截断超长字符串

时间:2014-12-01 23:51:19

标签: postgresql sql-insert create-table postgresql-9.3

根据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');

我怎样才能让它发挥作用?

1 个答案:

答案 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));