字符数据类型(CHAR 和 VARCHAR)

存储由字母、数字和符号组成的字符串。数据类型 CHARACTER (CHAR) 和 CHARACTER VARYING (VARCHAR) 统称为字符串类型,而字符串类型的值称为字符串

字符数据可以存储为固定长度或可变长度的字符串。固定长度的字符串在输出时通过空格向右扩展;可变长度的字符串不能扩展。

SQL 语句中的字符串字面量必须以单引号引起。

语法

{ CHAR | CHARACTER } [ (octet‑length) ]
{ VARCHAR | CHARACTER VARYING ] } [ (octet‑length) ]

实参

CHAR 与 VARCHAR 数据类型

以下差异适用于 CHARVARCHAR 数据:

  • CHAR 在概念上是固定长度、填充空格式字符串。结尾空格将在输入时移除,并且在输出时还原。默认长度为 1,最大长度为 65000 个八位字节(字节)。

  • VARCHAR 是可变长度的字符数据类型。默认长度为 80,最大长度为 65000 个八位字节。对于长于 65000 的字符串值,使用 长数据类型。值可以包括结尾空格。

通常,您对所有字符串数据使用 VARCHAR。在需要固定宽度的字符串输出时,请使用 CHAR。例如,对于要传输到需要固定宽度字符串的旧系统的数据,可以使用 CHAR 列。

设置最大长度

在您定义字符列时,请指定要存储在某一列中的任何字符串的最大大小。例如,要存储最大长度为 24 个八位字节的字符串,请使用以下定义之一:

CHAR(24)    --- fixed-length
VARCHAR(24) --- variable-length

VARCHARCHAR 数据类型的最大长度参数是指可存储在该字段中的八位字节数,而不是字符数(Unicode 代码点)。在使用多字节 UTF-8 字符时,必须根据数据将字段大小调整为每个字符能够容纳 1 至 4 个八位字节。如果加载到 VARCHARCHAR 列中的数据超过了为该列指定的最大大小,将根据 UTF-8 字符边界截断数据,以符合指定大小。请参阅 COPY

由于 Vertica 中的压缩,导致过高估计这些字段的长度产生成本,主要是在加载时和排序期间产生成本。

NULL 与 NUL

NULLNUL 区别如下:

  • NUL 表示其 ASCII/Unicode 代码为 0 的字符,有时限定为“ASCII NUL”。

  • NULL 是指没有值,字段(列)或常数皆是如此,字符却不。

CHARLONG VARCHARVARCHAR 字符串数据类型接受 ASCII NUL 值。

在升序排序中,NULL 出现在最后(最大)。

有关 NULL 排序的更多信息,请参阅 NULL 排序顺序

以下示例将包含 NUL 值的输入字符串转换为 VARCHAR

=> SELECT 'vert\0ica'::CHARACTER VARYING AS VARCHAR;
 VARCHAR
---------
 vert\0ica
(1 row)

结果包含 9 个字符:

=> SELECT LENGTH('vert\0ica'::CHARACTER VARYING);
 length
--------
      9
(1 row)

如果您使用扩展字符串字面量,则长度为 8 个字符:

=> SELECT E'vert\0ica'::CHARACTER VARYING AS VARCHAR;
 VARCHAR
---------
 vertica
(1 row)
=> SELECT LENGTH(E'vert\0ica'::CHARACTER VARYING);
 LENGTH
--------
      8
(1 row)