如果我定义varchar(25)
并且我的字符串少于25个字符(例如12个字符),则SQL将char的向量显示为12的长度并且不添加尾随空格(与字符不同)。< / p>
我的问题如下:在SQL显示字段中插入的字符串(或者如果长度超过最大长度时截断)这一事实背后,Postgresql如何存储这样的数据类型?
是否用额外的字节填充为:
十二岁.............(长度:25)
或只存储12个字节?
我认为这可能在内部更加复杂。我只需要知道maximum-length
可选参数是否可以禁止大字符串存储或只是性能问题(关于所有子序列存储的字符串是否应该小于或等于25个字符)。
答案 0 :(得分:3)
SQL定义了两种主要的字符类型:字符变化(n)和 character(n),其中n是正整数。这两种类型都可以 存储最多n个字符的字符串。试图存储一个 较长的字符串到这些类型的列将导致错误, 除非多余的字符都是空格,在这种情况下是字符串 将被截断为最大长度。 (这有点奇怪 SQL标准需要异常。)如果要存储的字符串 比声明的长度短,类型字符的值将是 空格填充;类型字符变化的值将简单地存储 较短的字符串。
和
短字符串(最多126个字节)的存储要求是1个字节 加上实际的字符串,包括案例中的空格填充 性格。较长的字符串有4个字节的开销而不是1个。
最后
提示:这三种类型之间没有性能差异, 除了使用空白填充类型时增加的存储空间, 和一些额外的周期来检查存储到一个时的长度 长度受限的列。虽然字符(n)具有性能 在其他一些数据库系统中的优势,它没有这样的优势 在PostgreSQL中。
来自here
答案 1 :(得分:0)
根据documentation,varchar
没有存储填充。但是,character
就是这样。存储字符串的长度也有一些开销。