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

10

在存储字符串(例如名字)时,最好使用哪种数据类型?我看到过varchar和nvarchar都被使用过。哪一个更好?这有关系吗?

我也听说过最好的长度是255,但我不知道为什么。有没有特定的字符串长度是首选的?


使用varchar或nvarchar与char(256)相比,是否存在性能差异? - hookenz
1
@Matt:如果你使用 char,那么你的列将始终占用足够多的空间来容纳指定数量的字符。这可能会给你带来非常微小的速度优势,但除非你知道你的数据长度很少变化,否则你最终将浪费大量的空间。最好选择 varchar 或 nvarchar。 - StriplingWarrior
4个回答

19

nvarchar 存储 Unicode 字符数据,如果您计划存储非英语名称,则必须使用 nvarchar。如果是 Web 应用程序,即使您不打算国际化,我强烈建议使用 nvarchar。缺点是它会消耗两倍的空间,nvarchar每个字符占用16位,而varchar每个字符占用8位。


6
什么是最好的数据类型用于存储字符串,比如名字?我见过varchar和nvarchar都被使用。哪一个更好?有关系吗?
请参阅 MSSQL中nchar(10)和varchar(10)之间的区别是什么? 如果需要非ASCII字符,则必须使用nchar/nvarchar。如果不需要,则可以使用char/varchar以节省空间。
请注意,这个问题只适用于MS SQL Server,它对UTF-8的支持不好。在其他支持UTF-8的SQL实现中,您可以使用Unicode字符串而不需要额外的空间要求(英文)。 编辑:自此答案撰写时起,SQL Server 2019(15.x)终于引入了 UTF-8支持。您可能想考虑将其作为默认的数据库文本编码。

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

参见为什么我们经常看到VARCHAR(255)(而不是其他长度)?

是否有特定的字符串长度被推荐使用?

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

另一方面,如果限制是任意的,则选择一个较大的最大大小以避免拒绝有效数据。在SQL Server中,您可能需要考虑索引键的900字节最大大小


1

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


0

通常,对于小字符串,请使用支持Unicode字符的nvarchar(n)。当与行或页面压缩一起使用时(至少其中之一通常是理想的),该字符串将被compressed

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

对于特殊情况,当您的数据集从不使用Unicode字符时,varchar(n)varchar(max)限制每个字符的字符串类型为1个字节。

如果您知道最大长度(n)小于256,则SQL Server仅需要使用1个字节来存储字符串长度。与最大长度略大于255的字符串类型相比,这将减少约半个百分点的存储空间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接