PostgreSQL。文本和varchar(字符变化)之间的区别

文本 "数据类型和 "字符变化"("varchar")数据类型之间有什么区别?

根据文档的说法

如果使用没有长度指定的字符变化,该类型接受任何大小的字符串。后者是PostgreSQL的一个扩展。

此外,PostgreSQL提供了text类型,它可以存储任何长度的字符串。尽管文本类型不在SQL标准中,但其他几个SQL数据库管理系统也有这个类型。

那么,有什么区别呢?

解决办法

没有区别,在引擎盖下都是varlena可变长度数组)。

查看Depesz的这篇文章:http://www.depesz.com/index.php/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/

有几个亮点。

总结一下。

  • char(n) - 在处理短于n'的值时,需要太多的空间(将它们填充到n'),并可能导致微妙的错误,因为要添加尾部的 空格,而且改变限制是有问题的。
  • varchar(n) - 在实时环境中改变限制是有问题的(改变表时需要独占锁)。
  • varchar - 就像文本一样
  • text - 对我来说是个赢家 - 超过(n)数据类型,因为它没有这些问题,而超过varchar - 因为它有独特的名字。

这篇文章做了详细的测试,表明所有4种数据类型的插入和选择的性能是相似的。它还详细研究了在需要时约束长度的其他方法。基于函数的约束或域提供了即时增加长度约束的优势,在减少字符串长度约束很少的基础上,depesz得出结论,它们中的一个通常是长度限制的最佳选择。

评论(8)

正如文档中的"字符类型"所指出的,varchar(n)char(n)text都是以同样的方式存储。唯一的区别是需要额外的周期来检查长度(如果有的话),以及如果char(n)需要填充的话需要额外的空间和时间。

然而,当你只需要存储一个字符时,使用特殊类型"char"有一点性能优势(保留双引号--它们是类型名称的一部分)。你可以更快地访问该字段,而且没有存储长度的开销。

我刚刚做了一个从小写字母表中选择的1,000,000个随机"char"的表格。获取频率分布的查询(select count(*), field ... group by field)大约需要650毫秒,而使用text字段的相同数据则需要760毫秒。

评论(3)

关于PostgreSQL手册

评论(0)