PostgreSQL(二) —— Character

230 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情

引言

上一篇介绍了PostgreSQL(一) 安装教程,本篇介绍 PostgreSQL 数据类型 —— Character。

Character Types

PgSQL 字符数据类型

NameDescription
character varying(n),varchar(n)可变长度字符,限制最大长度
character(n),char(n)固定长度字符,空白填充
text可变长度字符,无最大长度限制

从上表可以看出,PgSQL 提供了两种主要的字符数据类型:可变长度 n 字符数据类型和固定长度 n 字符数据类型。这两种类型都可以存储长度不超过 n 个字符(不是字节)的字符串。当尝试存储的字符串的字符长度(超出长度的字符不是空格)超过限制长度 n 时会数据库会导致字符串将被截断为最大长度(这个有点奇怪的异常处理是 SQL 标准所要求的)。如果要存储的字符串短于声明的长度,则 character 类型将在字符串后填充空格;character varying 类型将仅存储较短的字符串。

varcher(n)character varying(n) 的别称,char(n)character(n)的别称,如果指定长度,长度的范围是大于 0 小于 10485760。character 如果不指定长度则默认为 character(1)character varying 不指定长度,则可以接受任意字符串。

此外,PostgreSQL 还提供了 text 类型,用于存储任何长度的字符串。虽然类型文本不在 SQL标 准中,但其他几个 SQL 数据库管理系统也有它。

短字符串(最多126字节)是由一个字节的头部+实际的字符串内容组成。长字符串有4个字节的头部,长字符串由于会被系统压缩实际存在磁盘上的大小可能更小。非常长的值存储在后台表中,以便它们不会干扰对较短列值的快速访问。在任何情况下,可以存储的最长字符串约为 1 GB(数据类型声明中允许 n 的最大值小于该值。更改此设置没有用,因为对于多字节字符编码,字符数和字节数可能大不相同。如果希望存储没有特定上限的长字符串,使用 textcharacter varying,而不是构成任意长度限制)。

这三种类型之间没有性能差异,除了在使用空白填充类型时增加了存储空间,以及在存储到长度受限列时需要几个额外的 CPU 周期来检查长度。虽然 character(n) 在其他一些数据库系统中具有性能优势,但在 PostgreSQL 中没有这样的优势;事实上,character(n) 通常是三者中最慢的,因为它有额外的存储成本。在大多数情况下,建议替换为 textcharacter varying