PostgreSQL的。串联的奇怪行为

时间:2012-05-29 13:28:56

标签: postgresql char concatenation

非常简短的问题。任何人都可以说为什么这个查询

select LENGTH(' '::char || ' '::char), LENGTH(' '::text || ' '::char), LENGTH(' ' || ' '), LENGTH('a'::char || 'b'::char);

返回

0    1    2    2

空格特殊字符是否与其他字符串不连接?

文档只说明了这一点:

Unless otherwise noted, all of the functions listed below work
on all of these types, but be wary of potential effects of
automatic space-padding when using the character type.

为什么我这样做?因为我在存储过程中用char构建字符串char,当我尝试用char连接varchar时没有任何事情发生。

1 个答案:

答案 0 :(得分:2)

CHAR type是“固定长度,空白填充”。这意味着,如果将"foobar"存储到char(10)字段中,Postgres实际存储"foobar "(即四个尾随空格,SO不保留相邻的空格)。当您获取值时,将删除任何尾随空格。 ' '::char也会发生同样的情况 - 它的尾随空格被剥离,只留下一个零长度的字符串。