这是我从未理解过的。我们想说我想要一个存储电子邮件地址的列。我想,
"好的,电子邮件地址通常不超过15个字符,但我会 说50个最大字符只是为了安全起见。"
并制作该列VARCHAR(50)
。当然,这意味着我必须创建额外的代码,可能是对该列的条目的客户端和服务器端验证。
这提出了 为什么不一直只使用NVARCHAR
的问题,除非在我的应用程序的逻辑指定固定或最大长度。据我所知,如果我创建一个VARCHAR(50)
并且没有任何条目超过25个字符,这并不意味着50%的空间被浪费,因为数据库知道如何优化所有内容。
同样,这提出了为什么不使用NVARCHAR
的问题。
答案 0 :(得分:1)
nvarchar
本身与“无限长度的字符串”无关,因为它只是varchar
的unicode版本。目前没有理由使用varchar
(除了一些向后兼容性问题),nvarchar
应该是首选。
所以我想你在问为什么不在任何地方使用nvarchar(max)
几乎无限制(2 GB存储)而不是为具体列指定nvarchar(n)
。
使用nvarchar(n)
代替nvarchar(max)
的原因有很多。
例如,如果您的列应包含在索引中 - 它不能是nvarchar(max)
。
此外,nvarchar(max)
数据的内部存储方式与nvarchar(n)
不同,有时也可以affect performance。