文本数据类型和字符变化(varchar)数据类型之间的区别是什么?
根据文档
如果使用不带长度说明符的字符变化,则该类型接受任何大小的字符串。后者是PostgreSQL的扩展。
and
此外,PostgreSQL还提供了文本类型,用于存储任意长度的字符串。尽管类型text不在SQL标准中,但其他几个SQL数据库管理系统也具有它。
那么有什么不同呢?
文本数据类型和字符变化(varchar)数据类型之间的区别是什么?
根据文档
如果使用不带长度说明符的字符变化,则该类型接受任何大小的字符串。后者是PostgreSQL的扩展。
and
此外,PostgreSQL还提供了文本类型,用于存储任意长度的字符串。尽管类型text不在SQL标准中,但其他几个SQL数据库管理系统也具有它。
那么有什么不同呢?
当前回答
没有区别,在引子里都是可变长度数组。
查看本文来自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得出结论,它们中的一个通常是长度限制的最佳选择。
其他回答
没有区别,在引子里都是可变长度数组。
查看本文来自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得出结论,它们中的一个通常是长度限制的最佳选择。
有些OT:如果你使用Rails,网页的标准格式可能会有所不同。对于数据输入表单,文本框是可滚动的,但是字符变化(Rails字符串)框是一行的。显示视图根据需要而定。
正如文档中的“字符类型”所指出的,varchar(n)、char(n)和text都是以相同的方式存储的。唯一的区别是需要额外的循环来检查长度,如果给定了一个,如果需要填充char(n),则需要额外的空间和时间。
然而,当您只需要存储单个字符时,使用特殊类型“char”会有轻微的性能优势(保留双引号-它们是类型名称的一部分)。您可以更快地访问字段,并且没有存储长度的开销。
我刚刚创建了一个包含1,000,000个从小写字母中随机选择的“字符”的表。查询频率分布(select count(*), field…按字段分组)大约需要650毫秒,而使用文本字段的相同数据大约需要760毫秒。
来自http://www.sqlines.com/postgresql/datatypes/text:的一个很好的解释
TEXT和VARCHAR(n)之间的唯一区别是您可以限制 VARCHAR列的最大长度,例如VARCHAR(255) 不允许插入长度超过255个字符的字符串。 TEXT和VARCHAR的上限都是1gb,但是没有 它们之间的性能差异(根据PostgreSQL 文档)。
我浪费了太多的时间,因为使用varchar而不是文本的PostgreSQL数组。
数组操作符不能处理字符串列。详情请参阅以下链接:(https://github.com/rails/rails/issues/13127)和(http://adamsanderson.github.io/railsconf_2013/?full#10)。