PostgreSQL 教程: 字符类型: char、varchar 和 text

八月 22, 2023

摘要:在本教程中,您将了解 PostgreSQL 字符数据类型,包括CHARVARCHAR、 和TEXT,并了解如何为表选择正确的字符类型。

PostgreSQL 字符类型简介

PostgreSQL 提供三种主要字符类型:CHARACTER(n)CHAR(n)CHARACTER VARYING(n)VARCHAR(n)、和TEXT,其中n是正整数。

下表说明了 PostgreSQL 中的字符类型:

字符类型 描述
CHARACTER VARYING(n), VARCHAR(n) 有长度限制的可变长度
CHARACTER(n), CHAR(n) 固定长度,空白填充
TEXT, VARCHAR 可变无限长度

CHAR(n)VARCHAR(n)都最多可存储n个字符。如果您尝试存储超过n个字符的字符串,PostgreSQL 将发出错误。

但有一个例外,如果多余的字符都是空格,PostgreSQL 会将空格截断至最大长度 (n) 并存储这些字符。

如果字符串显式转换为CHAR(n)VARCHAR(n),PostgreSQL 会在将字符串插入表之前将其截断为n个字符。

TEXT数据类型可以存储无限长度的字符串。

如果您没有为VARCHAR数据类型指定 n 整数,则其行为与TEXT数据类型类似。VARCHAR(不包括长度n)的性能和TEXT是相同的。

VARCHAR数据类型指定长度说明符的优点是,如果您尝试将包含比n个字符更长的字符串插入VARCHAR(n)类型的列中,PostgreSQL 将发出错误。

VARCHAR不同的是,不带长度说明符 (n) 的CHARACTERCHARCHARACTER(1)CHAR(1)相同。

与其他数据库系统不同的是,在PostgreSQL中,三种字符类型之间没有性能差异。

在大多数情况下,您应该使用TEXTVARCHAR。当您希望 PostgreSQL 检查长度时,您可以使用VARCHAR(n)

PostgreSQL 字符类型示例

让我们看一个示例,了解CHARVARCHARTEXT数据类型如何工作。

首先,创建一个新表,名为 character_tests:

CREATE TABLE character_tests (
	id serial PRIMARY KEY,
	x CHAR (1),
	y VARCHAR (10),
	z TEXT
);

然后,将新行插入character_tests表中。

INSERT INTO character_tests (x, y, z)
VALUES('Yes','This is a test for varchar','This is a very long text for the PostgreSQL text column')

PostgreSQL 发出错误:

ERROR:  value too long for type character(1)

这是因为x列的数据类型是char(1),并且我们尝试向该列插入一个包含三个字符的字符串。让我们修复它:

INSERT INTO character_tests (x, y, z)
VALUES(	'Y','This is a test for varchar','This is a very long text for the PostgreSQL text column'	);

PostgreSQL 发出不同的错误:

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

这是因为我们尝试将超过 10 个字符的字符串插入到具有varchar(10)数据类型的y列中。

以下语句成功地将新行插入到character_tests表中。

INSERT INTO character_tests (x, y, z)
VALUES(	'Y','varchar(n)','This is a very long text for the PostgreSQL text column'
	);

SELECT * FROM character_tests;
 id | x |     y      |                            z
----+---+------------+---------------------------------------------------------
  1 | Y | varchar(n) | This is a very long text for the PostgreSQL text column
(1 row)

概括

  • PostgreSQL 支持CHARVARCHARTEXT数据类型。CHAR是定长字符类型,而VARCHARTEXT是变长字符类型。

  • 如果您想在插入或更新列之前验证字符串的长度 (n),请使用VARCHAR(n)

  • VARCHAR(没有长度说明符)和TEXT是等效的。