【发布时间】:2010-07-01 10:11:09
【问题描述】:
为什么我们总是需要指定VARCHAR(length) 而不仅仅是VARCHAR?无论如何,它是动态的。
UPD:我对它是强制性的这一事实感到特别困惑(例如在 MySQL 中)。
【问题讨论】:
-
谢谢,这确实是重复的。
为什么我们总是需要指定VARCHAR(length) 而不仅仅是VARCHAR?无论如何,它是动态的。
UPD:我对它是强制性的这一事实感到特别困惑(例如在 MySQL 中)。
【问题讨论】:
VARCHAR的“长度”不是内容的长度,是内容的最大长度。
VARCHAR 的最大长度不是动态的,它是固定的,因此必须指定。
如果您不想为其定义最大大小,请使用 VARCHAR(MAX)。
【讨论】:
首先,并非所有数据库都需要它。看SQL Server,这里是可选的。
无论如何,它定义了字段内容的最大大小。本身并不是一件坏事,而且它传达了意义(例如 - 电话号码,您不希望在该字段中使用国际号码)。
【讨论】:
impact 可能的性能:在 MySQL 中,temporary tables 和 MEMORY tables 将 VARCHAR 列存储为固定长度列,填充到其最大长度。
如果您设计的VARCHAR 列比您需要的最大尺寸大得多,您将消耗更多的内存。这会影响cache efficiency, sorting speed等。
所以你给出了字符串下的最大长度。就像如果你的最大字符长度为 10,所以不要给他的长度 100 或更多。
【讨论】:
您可以将其视为对数据的约束。它确保您不会存储违反约束的数据。它在概念上类似于例如整数列上的检查约束,确保只输入正值。
【讨论】:
数据库对它存储的数据了解得越多,它在使用请求搜索/添加/更新数据时就可以进行更多优化。
【讨论】:
答案是您不需要,这是可选的。
如果你想确保字符串不超过一定长度,它就在那里。
【讨论】:
来自Wikipedia:
Varchar 字段可以是任意大小 到极限。限额不同于 数据库类型,Oracle 9i 数据库有 4000 字节的限制,一个 MySQL 数据库的限制为 65,535 字节(整行)和 Microsoft SQL Server 2005 8000 字节 (除非使用 varchar(max),否则 最大存储容量为 2,147,483,648 字节)。
【讨论】:
正如@DimaFomin 在 cmets 中指出的那样,对于程序员来说最危险的事情是强制执行默认长度,如果没有指定长度。
SQL Server 如何强制使用默认长度:
declare @v varchar = '123'
select @v
结果:
1
【讨论】: