PostgreSQL。文本和varchar(字符变化)之间的区别
文本 "数据类型和 "字符变化"("varchar")数据类型之间有什么区别?
根据文档的说法
如果使用没有长度指定的字符变化,该类型接受任何大小的字符串。后者是PostgreSQL的一个扩展。
和
此外,PostgreSQL提供了text类型,它可以存储任何长度的字符串。尽管文本类型不在SQL标准中,但其他几个SQL数据库管理系统也有这个类型。
那么,有什么区别呢?
551
3
没有区别,在引擎盖下都是
varlena
(可变长度数组)。查看Depesz的这篇文章:http://www.depesz.com/index.php/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/
有几个亮点。
这篇文章做了详细的测试,表明所有4种数据类型的插入和选择的性能是相似的。它还详细研究了在需要时约束长度的其他方法。基于函数的约束或域提供了即时增加长度约束的优势,在减少字符串长度约束很少的基础上,depesz得出结论,它们中的一个通常是长度限制的最佳选择。
正如文档中的"字符类型"所指出的,
varchar(n)
、char(n)
和text
都是以同样的方式存储。唯一的区别是需要额外的周期来检查长度(如果有的话),以及如果char(n)
需要填充的话需要额外的空间和时间。然而,当你只需要存储一个字符时,使用特殊类型
"char"
有一点性能优势(保留双引号--它们是类型名称的一部分)。你可以更快地访问该字段,而且没有存储长度的开销。我刚刚做了一个从小写字母表中选择的1,000,000个随机
"char"
的表格。获取频率分布的查询(select count(*), field ... group by field
)大约需要650毫秒,而使用text
字段的相同数据则需要760毫秒。关于PostgreSQL手册