PostgreSQL 字符类型

本文介绍了 PostgreSQL 中的三种字符数据类型:CHARVARCHAR,和 TEXT

字符类型以文本形式存储数据,PostgreSQL 提供了三种字符数据类型: CHARVARCHAR,和 TEXT

PostgreSQL 字符类型用法

下面说明了 PostgreSQL 中的三种字符类型的用法:

  • CHAR(n) 存储固定长度的字符串,长度不足时,使用空白填充。
  • VARCHAR(n) 存储具有长度限制的可变长度文本。
  • VARCHAR 存储没有长度限制的可变长度文本。 它与 TEXT 完全相同。
  • TEXT 存储没有长度限制的可变长度文本。

CHAR(n)VARCHAR(n) 最多可存储 n 字符。 VARCHARTEXT 完全相同。

对于限制了长度的字符类型来说,如果写入的内容超过了限制的长度,PostgreSQL 采用如下的策略:

  • 如果超出长度的部分只有空格,则多余的空格会被截断。
  • 如果超出长度的部分不只是空格,则给出错误提示。

在 PostgreSQL 中,三种字符类型之间没有性能差异,因此你只需要根据的需要选择合适的类型即可。通常您应该使用 TEXT 或者 VARCHAR

PostgreSQL 字符类型示例

这个示例说明了 CHARVARCHAR 以及 TEXT 数据类型是如何工作的。

使用下面的语句创建一个新表用于测试:

CREATE TABLE test_character_type (
  char_1 CHAR(1),
  varchar_10 VARCHAR(10),
  txt TEXT
);

CHAR 类型实例

使用下面的语句向表中插入一个新行超出 char_1 列长度的值:

INSERT INTO test_character_type (char_1)
VALUES('OK')
RETURNING *;

PostgreSQL 发出错误:

ERROR:  value too long for type character(1)

这是因为该 char_1 列的数据类型是 CHAR(1),我们试图在该列中插入一个包含 2 个字符的字符串: 'OK'

使用下面的语句向表中插入一个新行超出 char_1 列长度的值,超出的部分为空格:

INSERT INTO test_character_type (char_1)
VALUES('Y    ')
RETURNING *;
 char_1 | varchar_10 | txt
--------+------------+-----
 Y      |            |

这里插入成功了。这是因为超出的部分是空格,PostgreSQL 自动截断了空格。

VARCHAR 类型实例

使用下面的语句向表中插入一个新行超出 varchar_10 列长度的值:

INSERT INTO test_character_type (varchar_10)
VALUES('Hello World')
RETURNING *;

PostgreSQL 发出错误:

ERROR:  value too long for type character varying(10)

这是因为该 varchar_10 列的数据类型是 VARCHAR(10),我们试图在该列中插入一个包含 11 个字符的字符串: 'Hello World'

使用下面的语句向表中插入一个新行超出 varchar_10 列长度的值,超出的部分为空格:

INSERT INTO test_character_type (varchar_10)
VALUES('HelloWorld    ')
RETURNING *;
 char_1 | varchar_10 | txt
--------+------------+-----
        | HelloWorld |
(1 row)

这里插入成功了。这是因为超出的部分是空格,PostgreSQL 自动截断了空格。

TEXT 类型实例

使用下面的语句向表中插入一个新行:

INSERT INTO test_character_type (txt)
VALUES('TEXT column can store a string of any length')
RETURNING txt;
                     txt
----------------------------------------------
 TEXT column can store a string of any length
(1 row)

对于一个 TEXT 列,您可以插入任意长度的字符串。

结论

PostgreSQL 提供了三种字符数据类型: CHARVARCHAR,和 TEXTCHAR 是固定长度的字符类型,而 VARCHARTEXT 具有可变的长度的字符类型。