将varchar与char进行比较

Xin*_*Xin 2 sql postgresql types

我想弄清楚Postgres在比较varchar时的作用char.

这是我的一个测试:

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

test=# select 'ab'::character varying = 'ab     '::character;
?column?
----------
 f
Run Code Online (Sandbox Code Playgroud)

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

Erw*_*ter 5

根本不是一个bug.
将字符串文字转换'ab 'character,这是你得到的:

a
Run Code Online (Sandbox Code Playgroud)

每个文件:

character没有长度说明符相当于character(1).

'a'::character(1)然后将强制为varchar(character varying)来测试平等'a'::varchar'ab'::varchar和产量TRUEFALSE分别.

基本上,几乎没有什么好的理由使用character 在所有.它是一种遗留类型,已经失去了它的实用性.只需使用textvarchar.

  • @zerkms不适合Postgres."虽然character(n)在其他一些数据库系统中具有性能优势,但PostgreSQL没有这样的优势;事实上,由于额外的存储成本,字符(n)通常是三者中最慢的."http:// www. postgresql.org/docs/9.2/static/datatype-character.html (3认同)