在SQL Server中存储字符串的最佳数据类型?

时间:2010-09-07 02:07:48

标签: sql sql-server

存储字符串时使用的最佳数据类型是什么,比如名字?我见过varchar和nvarchar都用了。哪一个更好?这有关系吗?

我也听说使用的最佳长度是255,但我不知道为什么。字符串是否有特定的长度?

4 个答案:

答案 0 :(得分:14)

nvarchar存储unicode字符数据,如果您计划存储非英文名称,则需要该数据。如果它是一个Web应用程序,我强烈建议您使用nvarchar,即使您没有计划是国际化的。缺点是它消耗的空间是两倍,nvarchar每个字符16位,varchar每个字符8位。

答案 1 :(得分:4)

  

使用的最佳数据类型是什么   存储字符串时,像第一个   名称?我见过varchar和nvarchar   两者都用过。哪一个更好?是否   这很重要吗?

请参阅What is the difference between nchar(10) and varchar(10) in MSSQL?

如果您需要非ASCII字符,则必须使用nchar / nvarchar。如果不这样做,那么您可能希望使用char / varchar来节省空间。

请注意,此问题特定于MS SQL Server,doesn't have good support for UTF-8。在其他SQL实现中,您可以使用没有额外空间要求的Unicode字符串(对于英语)。

  

我也听说过最好的长度   使用是255,但我不知道为什么。

请参阅Is there a good reason I see VARCHAR(255) used so often (as opposed to another length)?

  

是否有特定的长度   首选字符串?

如果数据具有明确定义的最大限制(例如,VIN为17个字符),则使用该数据。

OTOH,如果限制是任意的,那么选择一个宽大的最大尺寸以避免拒绝有效数据。在SQL Server中,您可能需要考虑900-byte maximum size of index keys

答案 2 :(得分:1)

nvarchar意味着您可以在其中保存unicode字符。 nvarchar类型有2GB限制。如果字段长度超过4000个字符,则使用溢出页面。较小的字段意味着一个页面可以容纳更多行,从而提高查询性能。

答案 3 :(得分:0)

通常,对于小字符串,请使用nvarchar(n),它支持Unicode字符。当与行或页面压缩一起使用时,字符串为compressed(通常需要其中至少一个)。

大字符串需要nvarchar(max),Unicode压缩不支持。

对于数据集永远不使用Unicode字符的特殊情况,varchar(n)varchar(max)限制每个字符一个字节的字符串类型。

如果您知道最大长度(n)小于256,则SQL Server只需使用1个字节来存储字符串长度。与最大长度超过255的字符串类型相比,这可以减少大约0.5%的存储空间。