为什么我们总是需要指定
更新:我特别困惑的是这在MySQL中是强制性的。
VARCHAR(length)
而不只是VARCHAR
?反正它的长度是动态的。更新:我特别困惑的是这在MySQL中是强制性的。
"length"指的不是VARCHAR中内容的长度,而是其最大长度。
VARCHAR的最大长度不是动态的,而是固定的,因此必须指定。
如果您不想为其定义最大大小,则可以使用VARCHAR(MAX)。
你可以把它看作是对你的数据的限制。它确保你不会存储违反你约束条件的数据。从概念上讲,它类似于在整数列上设置检查约束条件,以确保只输入正值。
数据库对存储数据的了解越多,当进行搜索/添加/更新请求时,它就可以进行更多的优化。
来自维基百科:
Varchar字段大小可以是任意的,但有大小限制。限制因数据库类型而异,Oracle 9i数据库限制为4000字节,MySQL数据库限制为65535字节(对于整个行),Microsoft SQL Server 2005限制为8000字节(除非使用varchar(max),其最大存储容量为2147483648字节)。
正如@DimaFomin在评论中指出的那样,对程序员来说最危险的事情是如果没有指定长度,则会强制执行默认长度。
SQL Server如何执行默认长度:
declare @v varchar = '123'
select @v
结果:
1