2012-05-29 118 views
1

很短的問題。誰能說爲什麼這個查詢PostgreSql。連接的奇怪行爲

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時沒有任何反應。

回答

2

CHAR type是「固定長度,空白填充」。這意味着如果您將"foobar"存儲到char(10)字段中,則Postgres實際存儲"foobar "(即四個尾隨空格,因此不會保留相鄰的空格)。當你取回你的值時,任何尾隨的空白都被刪除。 ' '::char也會發生同樣的情況 - 它的尾部空白符被刪除,只留下零長度的字符串。

+1

因此,我改變了我的變量類型,包含從char(1)到varchar(1)的currient char,並且everythign都變好了。謝謝。 – Yavanosta