字符串类型用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据。字符串可以进行区分或者不区分大小写的字符串比较,另外还可以进行模式匹配查找。在 PostgreSQL
中,字符串类型是指 CHAR
、 VARCHAR
和 TEXT
。
类型名称 | 说明 | 是否补空白 |
CHAR(n) CHARACTER(n) |
固定长度非二进制字符串 | 补空白 |
VARCHAR(n) CHARACTER VARYING(n) |
变长非二进制字符串,有长度限制 | 不补空白 |
TEXT |
变长非二进制字符串,无长度限制 | 不补空白 |
CHARACTER(n) vs CHARACTER VARYING(n)
其中 n
是一个正整数。 CHARACTER(n)
和 CHARACTER VARYING(n)
都可以存储最多n个字符的字符串。
试图存储更长的字符串到这些类型的字段里会产生一个错误,除非超出长度的字符串都是空白,这种情况下该字符串将被截断为最大长度。
如果要存储的字符串比声明的长度短,类型为CHARACTER的数值将会用空白占满;而类型为CHARACTER VARYING的数值将只存储短些的字符串。
示例:
$ CREATE TABLE temp(ch CHARACTER(4), vch CHARACTER VARYING(4)); $ INSERT INTO temp VALUES('ab','ab'),('abcd','abcd'),('ab ','ab '); $ SELECT concat('(',ch,')'),concat('(',vch,')') FROM temp;点击复制复制失败已复制
结果如下:
concat(text) | concat(text) |
(ab ) | (ab) |
(abcd) | (abcd) |
(ab ) | (ab ) |
TEXT类型
TEXT
类型可以存储任何长度的字符串。尽管TEXT类型不是SQL标准,但是许多其他 SQL
数据库系统中也有。
$ CREATE TABLE temp(te TEXT); $ INSERT INTO temp VALUES('ab'),('abcd'),('ab '); $ SELECT concat('(',te,')') FROM temp;点击复制复制失败已复制
结果如下:
concat(text) |
(ab) |
(abcd) |
(ab ) |