我想弄清楚Postgres在将varchar
与char
进行比较时的作用。
这是我的一个测试:
test=# select 'a'::character varying = 'a '::character;
?column?
----------
t
test=# select 'ab'::character varying = 'ab '::character;
?column?
----------
f
对我来说这看起来像个错误。有谁知道这里发生了什么?关于这个主题是否有好的文件?
答案 0 :(得分:5)
根本不是一个错误。
将字符串文字'ab '
投射到character
,这就是你得到的:
a
没有长度说明符的然后,
character
相当于character(1)
。
'a'::character(1)
将被强制转移到varchar
(character varying
)以测试与'a'::varchar
或'ab'::varchar
的平等并获得TRUE
或{分别为{1}}。
基本上,几乎没有任何理由可以使用FALSE
。它是一种遗留类型,已经失去了它的实用性。只需使用character
或text
。