这似乎是一个非常武断的决定。 在大多数情况下,两者都能完成同样的事情。 通过限制varchar长度在我看来就像你在脚下拍摄自己一样,因为你永远不知道你需要多长时间。
是否有为字符串字段选择VARCHAR或TEXT的具体指导原则?
我将使用带有sqlalchemy orm框架的postgresql for python。
答案 0 :(得分:7)
在PostgreSQL中,varchar
和text
您可以将varchar(nnn)
视为text
列,其中包含禁止存储较大值的检查约束。
因此,每次要获得长度约束时,请使用varchar(nnn)
。
如果您不想限制数据的长度,请使用text
答案 1 :(得分:2)
这句话错了:
通过限制varchar长度在我看来就像你在脚下射击自己一样,因为你永远不知道你需要多长时间。
如果您正在保存,例如MD5哈希,您就会知道存储的字段有多大,您的存储会变得更有效率。其他例子是:
答案 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(我认为)。对于单个列,大多数应用程序不需要那么多的存储空间。