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