是varchar(n)在postgresql中节省内存空间?

时间:2013-05-13 14:51:39

标签: postgresql varchar

如果我定义varchar(25)并且我的字符串少于25个字符(例如12个字符),则SQL将char的向量显示为12的长度并且不添加尾随空格(与字符不同)。< / p>

我的问题如下:在SQL显示字段中插入的字符串(或者如果长度超过最大长度时截断)这一事实背后,Postgresql如何存储这样的数据类型?

是否用额外的字节填充为:

  

十二岁.............(长度:25)

或只存储12个字节?

我认为这可能在内部更加复杂。我只需要知道maximum-length可选参数是否可以禁止大字符串存储或只是性能问题(关于所有子序列存储的字符串是否应该小于或等于25个字符)。

2 个答案:

答案 0 :(得分:3)

  

SQL定义了两种主要的字符类型:字符变化(n)和   character(n),其中n是正整数。这两种类型都可以   存储最多n个字符的字符串。试图存储一个   较长的字符串到这些类型的列将导致错误,   除非多余的字符都是空格,在这种情况下是字符串   将被截断为最大长度。 (这有点奇怪   SQL标准需要异常。)如果要存储的字符串   比声明的长度短,类型字符的值将是   空格填充;类型字符变化的值将简单地存储   较短的字符串。

  

短字符串(最多126个字节)的存储要求是1个字节   加上实际的字符串,包括案例中的空格填充   性格。较长的字符串有4个字节的开销而不是1个。

最后

  

提示:这三种类型之间没有性能差异,   除了使用空白填充类型时增加的存储空间,   和一些额外的周期来检查存储到一个时的长度   长度受限的列。虽然字符(n)具有性能   在其他一些数据库系统中的优势,它没有这样的优势   在PostgreSQL中。

来自here

答案 1 :(得分:0)

根据documentationvarchar没有存储填充。但是,character就是这样。存储字符串的长度也有一些开销。