string

发布时间 2023-12-31 14:45:17作者: euv

pg有3种字符串类型。

  1. char(n):定长,不足用空格填补。省略n表示char(1)。
  2. varchar(n):变长,省略n表示任意长度,无限制。
    n是字符个数,不是字节个数。the length n must be greater than zero and cannot exceed 10,485,760. 写入表字段的字符串长度超出n数据库会报错。
  3. text:不需要也无法指定长度,表示任意长度的字符串。

使用建议:三者中char(n)的性能最差(虽然在其他数据库反而性能最好,但在pg中就是最差),优先使用text或不指定n的varchar,如果想在数据库层面对长度进行检查和约束时使用varchar(n).(这种约束会带来额外的CPU消耗)

NOTE

  1. 字符串类型(char,varchar或text)的字段,能够存储的字符串最大字节数是1GB;字符集不同,最大字符串长度也不同。
  2. 对于长字符,pg会将它存储到background table,避免它拖慢加载短字段的效率。
  3. 存储到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中时,就会触发上述的错误。