在PostgreSQL中,CHARACTER VARYING和VARCHAR有什么区别?

180

John在我使用VARCHAR的地方使用CHARACTER VARYING

我是初学者,而他是专家,这表明我不知道某些东西。

在PostgreSQL中,CHARACTER VARYING和VARCHAR有什么区别?


1
真正的问题应该是 TEXT 类型有什么区别。但也许在2009年,这种类型还不存在。 - Roland
5个回答

201

VARCHARCHARACTER VARYING的别名,因此没有区别,可以参考文档:)

符号varchar(n)char(n)分别是character varying(n)character(n)的别名。不带长度说明符的character相当于character(1)。如果使用不带长度说明符的character varying,则该类型接受任何大小的字符串。后者是PostgreSQL扩展功能。

关于大写字母的注意事项:PostgreSQL文档使用全部小写的字母风格:character varying。相比之下,官方的SQL标准在其1000页中始终使用全部大写字母的字母风格:CHARACTER VARYING


17
正好相反:varchar 是 varying 的别名。不想过于追究,但这已经在你的引语中明确说明了。 - zerzevul
4
鉴于varchar(n)等语法是 ANSI 标准,而这种语法在 PostgreSQL 中很奇特,因此有人可能会不同意文档并赞同 Charles 的说法。 - BobRodes

25

关于字符类型的说明,可以参考PostgreSQL文档。实际上,它们是同一种类型,只是名称不同。


15

简短回答:没有区别。

详细回答:CHARACTER VARYING是ANSI SQL标准中的正式类型名称,所有符合标准的数据库都必须支持它。(SQL兼容性特性ID E021-02)。

VARCHAR是一个更短的别名,在现代数据库中也被支持。我更喜欢使用VARCHAR,因为它更简洁,而且长名称感觉太学究了。然而,像pg_dump\d这样的postgres工具将输出character varying


7
唯一的区别是CHARACTER VARYINGVARCHAR更加人性化。

2
@joop 我没有接触过 COBOL 的荣幸,但我接触过英语,我认为“VARCH ARe what?” :-) - inor
13
我认为这会让顶尖程序员感到困惑。他们习惯于使用varchar。 - manocha_ak

3

两者是同一件事,但许多数据库并没有提供变长字符类型,主要是PostgreSQL提供了这种类型。因此,对于像Oracle、Postgre和DB2等多数据库的情况来说,使用Varchar是比较好的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接