当比较varchar和char时,我想弄清楚Postgres是怎么做的。
这是我的一个测试:
test=# select 'a'::character varying = 'a '::character;
?column?
----------
t
test=# select 'ab'::character varying = 'ab '::character;
?column?
----------
f在我看来这是个bug。有人知道这是怎么回事吗?关于这个主题有没有好的文档?
发布于 2013-06-27 09:46:41
一点都不是bug。
将字符串文字'ab '转换为character,结果如下所示:
aPer documentation:
不带长度说明符的
character等同于character(1)。
然后,'a'::character(1)将被强制为varchar (character varying),以测试与'a'::varchar或'ab'::varchar的等价性,并分别产生TRUE或FALSE。
基本上,几乎没有任何好的理由使用character。它是一种遗留类型,已经不再有用了。只要使用text或varchar即可。
https://stackoverflow.com/questions/17333196
复制相似问题