pg有3种字符串类型。
- char(n):定长,不足用空格填补。省略n表示char(1)。
- varchar(n):变长,省略n表示任意长度,无限制。
n是字符个数,不是字节个数。the length n must be greater than zero and cannot exceed 10,485,760. 写入表字段的字符串长度超出n
数据库会报错。 - text:不需要也无法指定长度,表示任意长度的字符串。
使用建议:三者中char(n)的性能最差(虽然在其他数据库反而性能最好,但在pg中就是最差),优先使用text或不指定n的varchar,如果想在数据库层面对长度进行检查和约束时使用varchar(n).(这种约束会带来额外的CPU消耗)
NOTE
- 字符串类型(char,varchar或text)的字段,能够存储的字符串最大字节数是1GB;字符集不同,最大字符串长度也不同。
- 对于长字符,pg会将它存储到background table,避免它拖慢加载短字段的效率。
- 存储到pg的字符串不能有代码是0的字符即nul。(Regardless of the specific character set, the character with code zero (sometimes called NUL) cannot be stored.)
NUL字符(0)是ASCII字符集中的一个特殊字符,它表示字符串的结束。 在C和C++等语言中,字符串通常以NUL字符结尾。 而在PostgreSQL中,NUL字符被视为字符串的终止符,并且不允许在字符串字面值中包含NUL字符。 这是因为在PostgreSQL的存储引擎中,字符串是以C字符串的形式存储的,即以NUL字符结尾。 因此,当我们尝试将包含NUL字符的字符串存储到PostgreSQL中时,就会触发上述的错误。
标签:字符,存储,varchar,string,NUL,pg,字符串 From: https://www.cnblogs.com/LiuwayLi/p/17937499