What is the difference between CHARACTER VARYING and VARCHAR in PostgreSQL?
The short answer: there is no difference.
The long answer: CHARACTER VARYING
is the official type name from the ANSI SQL standard, which all compliant databases are required to support. (SQL compliance Feature ID E021-02.)
VARCHAR
is a shorter alias which all modern databases also support. I prefer VARCHAR
because it's shorter and because the longer name feels pedantic. However, postgres tools like pg_dump
and \d
will output character varying
.
VARCHAR
is an alias for CHARACTER VARYING
, so no difference, see documentation :)
The notations
varchar(n)
andchar(n)
are aliases forcharacter varying(n)
andcharacter(n)
, respectively.character
without length specifier is equivalent tocharacter(1)
. Ifcharacter varying
is used without length specifier, the type accepts strings of any size. The latter is a PostgreSQL extension.
Note on capitalization: The PostgreSQL documentation uses the all lower case stylization: character varying
. In contrast the official SQL standard uses the stylization with all caps throughout its 1000 pages: CHARACTER VARYING
.
The PostgreSQL documentation on Character Types is a good reference for this. They are two different names for the same type.