你怎么知道何时使用varchar以及何时在sql中使用文本?

时间:2011-01-16 13:04:56

标签: sql string postgresql text varchar

这似乎是一个非常武断的决定。 在大多数情况下,两者都能完成同样的事情。 通过限制varchar长度在我看来就像你在脚下拍摄自己一样,因为你永远不知道你需要多长时间。

是否有为字符串字段选择VARCHAR或TEXT的具体指导原则?

我将使用带有sqlalchemy orm框架的postgresql for python。

6 个答案:

答案 0 :(得分:7)

在PostgreSQL中,varchartext

之间没有技术差异

您可以将varchar(nnn)视为text列,其中包含禁止存储较大值的检查约束。

因此,每次要获得长度约束时,请使用varchar(nnn)

如果您不想限制数据的长度,请使用text

答案 1 :(得分:2)

这句话错了:

  

通过限制varchar长度在我看来就像你在脚下射击自己一样,因为你永远不知道你需要多长时间。

如果您正在保存,例如MD5哈希,您就会知道存储的字段有多大,您的存储会变得更有效率。其他例子是:

  • 用户名(最多64个)
  • 密码(最多128个)
  • 邮政编码
  • 地址
  • 标签
  • 还有更多!

答案 2 :(得分:1)

简而言之:

  • 可变长度字段可节省空间,但由于每个字段的长度不同,因此表操作会变慢
  • 固定长度字段使表格操作快速,但必须足够大以获得最大预期输入,因此可以使用更多空间

想想数组和链表的类比,其中数组是固定长度字段,链表就像varchars。哪个更好,数组或链表?幸运的是,我们两者都有,因为它们在不同情况下都很有用,所以也是如此。

答案 3 :(得分:0)

在大多数情况下,您确实知道字段中字符串的最大长度是多少。如果是姓氏的第一个,例如,您不需要超过255个字符。因此,通过设计,您可以选择要使用的类型,如果您总是使用文本,则会浪费资源

答案 4 :(得分:0)

在PostgresOnline上查看this article,它还链接到另外两篇有用的文章。

当您使用处理TEXT与VARCHAR非常不同的工具,应用程序和驱动程序时,PostgreSQL中TEXT的大多数问题都会发生,因为其他数据库对这两种数据类型的行为非常不同。

答案 5 :(得分:-1)

数据库设计人员几乎总是知道列需要保留多少个字符。美国送货地址最多需要包含64个字符。 (美国邮政服务公司发布的说明指南就是这样说的。)美国邮政编码长度为5个字符。

数据库设计人员在指定列时会查看来自客户的代表性样本数据。她会问自己,问题是“什么是最长的产品名称?”当答案为“70个字符”时,她不会将列宽为3000个字符。

VARCHAR在SQL Server中的限制为8k(我认为)。对于单个列,大多数应用程序不需要那么多的存储空间。