我总是被SQL字符串列上需要最大长度所困扰。有一些数据没有真正的最大长度。例如,假设您有一个字段来存储某人的名字,并将其设为NVARCHAR(50)
。总是有可能(虽然极不可能)有人的名字超过50个字符。
在运行中更改字段的最大长度是否可行?我的意思是,当你执行INSERT/UPDATE
时,你会检查这个人的姓名是否超过50个字符,如果需要ALTER
表,那么INSERT/UPDATE
就可以ALTER
。 (或者,如果需要,可以捕获异常并执行ALTER
。)
如果表格中包含大量数据,NVARCHAR(100)
会是一个缓慢的操作吗?
假设您将列更改为SELECT
。此表中的NVARCHAR(100)
会比您从一开始就{{1}}慢吗?
答案 0 :(得分:2)
从使用nvarchar()
开始,我猜你正在使用SQL Server。
在SQL Server中,我通常只创建varchar(255)
(或nvarchar(255)
)这样的名称。这实际上是对2的幂(255 =最大8位无符号值)的亲和力的奇怪时代错误。但它在实践中运作良好。
在SQL Server中至少有两个注意事项。首先,字符串的最大“非最大”长度是8000个数据字节,即varchar(8000)
或nvarchar(4000)
。这些也是合理的最大长度。
第二个考虑因素是索引中键的长度。最大长度为900字节。如果您在该字段上有索引,那么您不希望该字段长于此值。如果你有复合索引,那么255似乎是一个合理的长度。
然而,关键点在于,更改字段的长度可能会产生您没有想到的效果,例如索引上的效果。您不想轻易更改表的结构。相反,只需要开始超大的字段,完全忘记问题。