2013-06-27 188 views
2

我想弄清楚Postgres在比較varcharchar時會做什麼。比較varchar和char

這裏是我的測試之一:

test=# select 'a'::character varying = 'a  '::character; 
?column? 
---------- 
t 

test=# select 'ab'::character varying = 'ab  '::character; 
?column? 
---------- 
f 

這看起來像我的錯誤。有人知道這裏發生了什麼嗎?這個話題有很好的文件嗎?

回答

5

不是一個錯誤。
鑄造字符串文字'ab 'character,這是你會得到什麼:

a 

Per documentation:

character沒有長度說明相當於character(1)。然後

'a'::character(1)將被強制爲varcharcharacter varying)來測試平等'a'::varchar'ab'::varchar和分別得到TRUEFALSE

基本上,幾乎沒有任何理由使用character在所有。這是一種傳統類型,已經失去了其實用性。只需使用textvarchar即可。

+0

「基本上,幾乎沒有任何好的理由使用」 ---不是固定長度的行更有效的(對於查找)? – zerkms

+3

@zerkms不適用於Postgres。 「雖然character(n)在其他一些數據庫系統中具有性能優勢,但在PostgreSQL中沒有這樣的優勢;實際上,由於其額外的存儲成本,字符(n)通常是三者中速度最慢的。」http:// www。 postgresql.org/docs/9.2/static/datatype-character.html – Xin

+1

@zerkms:Nope。按照我提供的鏈接。尋找突出顯示的提示... –