PostgreSQL Character Types: CHAR, VARCHAR, and TEXT
Summary: in this tutorial, you will learn about the PostgreSQL character data types including CHAR
, VARCHAR
, and TEXT
, and how to select the appropriate character types for your tables.
Introduction to the PostgreSQL character types
PostgreSQL provides three primary character types:
CHARACTER(n)
orCHAR(n)
CHARACTER VARYING(n)
orVARCHAR(n)
TEXT
In this syntax, n
is a positive integer that specifies the number of characters.
The following table illustrates the character types in PostgreSQL:
Character Types | Description |
---|---|
CHARACTER VARYING(n) , VARCHAR(n) | variable-length with length limit |
CHARACTER(n) , CHAR(n) | fixed-length, blank padded |
TEXT , VARCHAR | variable unlimited length |
Both CHAR(n)
and VARCHAR(n)
can store up to n
characters. If you attempt to store a string that has more than n
characters, PostgreSQL will issue an error.
However, one exception is that if the excessive characters are all spaces, PostgreSQL truncates the spaces to the maximum length (n
) and stores the trimmed characters.
If a string explicitly casts to a CHAR(n)
or VARCHAR(n)
, PostgreSQL will truncate the string to n
characters before inserting it into the table.
The TEXT
data type can store a string with unlimited length.
If you do not specify the n integer for the VARCHAR
data type, it behaves like the TEXT
datatype. The performance of the VARCHAR
(without the size n
) and TEXT
are the same.
The advantage of specifying the length specifier for the VARCHAR
data type is that PostgreSQL will issue an error if you attempt to insert a string that has more than n
characters into the VARCHAR(n)
column.
Unlike VARCHAR
, The CHARACTER
or CHAR
without the length, specifier (n
) is the same as the CHARACTER(1)
or CHAR(1)
.
Different from other database systems, in PostgreSQL, there is no performance difference among the three character types.
In most cases, you should use TEXT
or VARCHAR
and use the VARCHAR(n)
only when you want PostgreSQL to check the length.
PostgreSQL character type examples
Let’s take a look at an example to understand how the CHAR
, VARCHAR
, and TEXT
data types work.
First, create a new table called character_tests
:
Then, insert a new row into the character_tests
table:
PostgreSQL issued an error:
This is because the data type of the x
column is char(1)
and we attempted to insert a string with three characters into this column.
Let’s fix it:
PostgreSQL issues a different error:
This is because we attempted to insert a string with more than 10 characters into the column y
that has the varchar(10)
datatype.
The following statement inserts a new row into the character_tests
table successfully.
Output:
Summary
- PostgreSQL supports
CHAR
,VARCHAR
, andTEXT
data types. TheCHAR
is a fixed-length character type while theVARCHAR
andTEXT
are varying length character types. - Use
VARCHAR(n)
if you want to validate the length of the string (n
) before inserting into or updating to a column. VARCHAR
(without the length specifier) andTEXT
are equivalent.