文本数据类型和字符变化(varchar)数据类型之间的区别是什么?
根据文档
如果使用不带长度说明符的字符变化,则该类型接受任何大小的字符串。后者是PostgreSQL的扩展。
and
此外,PostgreSQL还提供了文本类型,用于存储任意长度的字符串。尽管类型text不在SQL标准中,但其他几个SQL数据库管理系统也具有它。
那么有什么不同呢?
文本数据类型和字符变化(varchar)数据类型之间的区别是什么?
根据文档
如果使用不带长度说明符的字符变化,则该类型接受任何大小的字符串。后者是PostgreSQL的扩展。
and
此外,PostgreSQL还提供了文本类型,用于存储任意长度的字符串。尽管类型text不在SQL标准中,但其他几个SQL数据库管理系统也具有它。
那么有什么不同呢?
当前回答
我浪费了太多的时间,因为使用varchar而不是文本的PostgreSQL数组。
数组操作符不能处理字符串列。详情请参阅以下链接:(https://github.com/rails/rails/issues/13127)和(http://adamsanderson.github.io/railsconf_2013/?full#10)。
其他回答
Text和varchar有不同的隐式类型转换。我注意到的最大影响是对尾随空格的处理。例如……
select ' '::char = ' '::varchar, ' '::char = ' '::text, ' '::varchar = ' '::text
返回真,假,真和不真,真,真,如你所料。
character varying(n), varchar(n) -(两者相同)。值将被截断为n个字符而不引发错误。 character(n), char(n) -(都是一样的)。固定长度,并将空白垫至长度结束。 文本-无限长度。
例子:
Table test:
a character(7)
b varchar(7)
insert "ok " to a
insert "ok " to b
我们得到了结果:
a | (a)char_length | b | (b)char_length
----------+----------------+-------+----------------
"ok "| 7 | "ok" | 2
在PostgreSQL手册上
There is no performance difference among these three types, apart from increased storage space when using the blank-padded type, and a few extra CPU cycles to check the length when storing into a length-constrained column. While character(n) has performance advantages in some other database systems, there is no such advantage in PostgreSQL; in fact character(n) is usually the slowest of the three because of its additional storage costs. In most situations text or character varying should be used instead.
我通常使用文本
引用:http://www.postgresql.org/docs/current/static/datatype-character.html
没有区别,在引子里都是可变长度数组。
查看本文来自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得出结论,它们中的一个通常是长度限制的最佳选择。
我浪费了太多的时间,因为使用varchar而不是文本的PostgreSQL数组。
数组操作符不能处理字符串列。详情请参阅以下链接:(https://github.com/rails/rails/issues/13127)和(http://adamsanderson.github.io/railsconf_2013/?full#10)。