有什么缺点的选择一个大的价值最大的当创建一个varchar或varbinary列?

我使用MS SQL但我认为这会有关的其他dbs。

感谢

有帮助吗?

解决方案

这取决于它是否是永远的合理要存储大量的数据中特别列。

如果你宣布一个列将永远不会正确地储存的数据(即雇员第一的名字作为一个VARCHAR(1000)),最终与各种各样的问题

  1. 许多--如果不是大多数客户Api(即ODBC drivers,JDBC驱动程序,等等)的分配缓冲存储器在客户都足够大,以储存的最大尺寸的一个特定的柱。因此,即使该数据库只有储存的实际数据,则可以大大增加的存储量客户应用程序使用。
  2. 你失去能力的驱动数据验证的规则(或传递信息有关数据),从表中的定义。如果该数据库允许1000字的第一个名字,每个应用程序与数据库可能会最终具有其自己的规则有多大一个雇员的姓名即可。如果这不是减轻,把存储的过程层之间的所有应用程序和表格,这一般会导致各种应用程序有各种规则。
  3. 墨菲的法律规定,如果您允许1000字,有人将最终储存1000字在列,或者至少是一个值大到足以导致错误中的一个或多个应用程序(即没有一个检查,看看是否每个应用程序的员工的名字段可以显示1000个字符)。

其他提示

取决于该RDBMS。 IIRC中,MySQL分配用于VARCHAR处理> 255个字符(跟踪VARCHAR长度)2字节的开销。 MSSQL <= 2000将允许你分配一个行大小> 8060个字节,但如果你试图插入或更新,实际上超过8060个字节的行会失败。 SQL 2005 [1]允许插入,但会分配一个新的页面溢出,并留下一个指针后面。显然,这会影响性能。

[1] VARCHAR(max)是一种特殊情况有所的,但是,如果该字段的长度为> 8000或行> 8060这与MSSQL默认还将分配溢出页,和行为可以与改变大类型的数据行选项。

您可以将破坏你的应用程序的风险,如果一个大的数据得到了某种方式(如从外部接口)和您的应用程序不是设计来处理它。

一个好的设计,你应该始终字段的大小限制为现实价值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top