PostgreSQL – CHAR、VARCHAR 和 TEXT 之间的区别
既然我们已经熟悉了 PostgreSQL 中字符数据类型 CHAR、VARCHAR 和 TEXT 的概念,本文将重点介绍它们之间的关键区别。
什么是CHAR数据类型?
此数据类型用于存储有限长度的字符。在 PostgreSQL 中它被表示为char(n)
或character(n)
,其中 n 表示字符长度的限制。如果未指定 n 则默认为char(1)
或character(1)
。
什么是 VARCHAR 数据类型?
此数据类型用于存储有限长度的字符。在PostgreSQL中表示为varchar(n)
,其中n表示字符长度的限制。如果未指定 n,则默认为具有无限长度的varchar
。
什么是 TEXT 数据类型?
此数据类型用于存储无限长度的字符。它在 PostgreSQL 中表示为text
。 varchar(不带n)和text的性能是一样的。
下表提供了 CHAR、VARCHAR 和 TEXT 之间的主要区别:
Comparison | CHAR | VARCHAR | TEXT |
---|---|---|---|
Syntax | CHAR(n) | VARCHAR(n) | TEXT |
Representation | char(n) or character(n) | varchar(n) | text |
Length of characters | Limited | Limited | Unlimited |
Spaces and padding | Gets truncated | Gets truncated | Renains intact |
If n not specified | n = 1 | n = infinity | Concept of n doesn’t exist |
Query cycle | Extra cycle to check length | Extra cycle to check length | No evaluation of character length |
例子:
让我们使用以下命令为演示创建一个新表(例如,character_tests):
CREATE TABLE character_tests (
id serial PRIMARY KEY,
x CHAR (1),
y VARCHAR (10),
z TEXT
);
现在让我们使用以下命令在 char_test 表中插入一个新行:
INSERT INTO character_tests (x, y, z)
VALUES
(
'Geeks',
'This is a test for varchar',
'This is a very long text for the PostgreSQL text column'
);
在这个阶段,PostgreSQL 将引发错误,因为 x 列的数据类型是 char(1),我们尝试将一个包含三个字符的字符串插入到该列中,如下所示:
ERROR: value too long for type character(1)
所以,现在让我们修复它。
INSERT INTO character_tests (x, y, z)
VALUES
(
'G',
'This is a test for varchar',
'This is a very long text for the PostgreSQL text column'
);
现在,由于输入的字符数大于 10,我们将在 y 列中得到相同的错误,如下所示:
ERROR: value too long for type character(10)
我们也修一下吧。
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;
输出: