在创建VARCHAR(K)列时,您应该如何选择K?或者是你?

时间:2016-01-27 07:09:33

标签: sql sql-server tsql database-design

这是我从未理解过的。我们想说我想要一个存储电子邮件地址的列。我想,

  

"好的,电子邮件地址通常不超过15个字符,但我会   说50个最大字符只是为了安全起见。"

并制作该列VARCHAR(50)。当然,这意味着我必须创建额外的代码,可能是对该列的条目的客户端和服务器端验证。

这提出了 为什么不一直只使用NVARCHAR 的问题,除非在我的应用程序的逻辑指定固定或最大长度。据我所知,如果我创建一个VARCHAR(50)并且没有任何条目超过25个字符,这并不意味着50%的空间被浪费,因为数据库知道如何优化所有内容。

同样,这提出了为什么不使用NVARCHAR的问题。

1 个答案:

答案 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