📜  PostgreSQL – CHAR、VARCHAR 和 TEXT 之间的区别

📅  最后修改于: 2022-05-13 01:57:15.803000             🧑  作者: Mango

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 之间的主要区别:



ComparisonCHARVARCHARTEXT
SyntaxCHAR(n)VARCHAR(n)TEXT
Representationchar(n) or character(n)varchar(n)text
Length of charactersLimitedLimitedUnlimited
Spaces and paddingGets truncatedGets truncatedRenains intact
If n not specifiedn = 1n = infinityConcept of n doesn’t exist
Query cycleExtra cycle to check lengthExtra cycle to check lengthNo 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;

输出: