八月 22, 2023
摘要:在本教程中,您将了解 PostgreSQL 字符数据类型,包括CHAR、VARCHAR、 和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) 的CHARACTER或CHAR与CHARACTER(1)或CHAR(1)相同。
与其他数据库系统不同的是,在PostgreSQL中,三种字符类型之间没有性能差异。
在大多数情况下,您应该使用TEXT或VARCHAR。当您希望 PostgreSQL 检查长度时,您可以使用VARCHAR(n)。
PostgreSQL 字符类型示例
让我们看一个示例,了解CHAR、VARCHAR和TEXT数据类型如何工作。
首先,创建一个新表,名为 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 支持
CHAR、VARCHAR和TEXT数据类型。CHAR是定长字符类型,而VARCHAR和TEXT是变长字符类型。 -
如果您想在插入或更新列之前验证字符串的长度 (
n),请使用VARCHAR(n)。 -
VARCHAR(没有长度说明符)和TEXT是等效的。