将varchar与char进行比较

时间:2013-06-27 01:37:25

标签: sql postgresql types

我想弄清楚Postgres在将varcharchar进行比较时的作用。

这是我的一个测试:

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

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

对我来说这看起来像个错误。有谁知道这里发生了什么?关于这个主题是否有好的文件?

1 个答案:

答案 0 :(得分:5)

根本不是一个错误。
将字符串文字'ab '投射到character,这就是你得到的:

a

Per documentation:

  没有长度说明符的

character相当于character(1)

然后,

'a'::character(1)将被强制转移到varcharcharacter varying)以测试与'a'::varchar'ab'::varchar的平等并获得TRUE或{分别为{1}}。

基本上,几乎没有任何理由可以使用FALSE 。它是一种遗留类型,已经失去了它的实用性。只需使用charactertext