八月 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
是等效的。