我正在存储名字和姓氏,每个字段最多30个字符。哪种更好:varchar
还是 nvarchar
?
我了解到,nvarchar
占用的空间是 varchar
的两倍,并且 nvarchar
用于国际化。
所以你建议我使用什么: nvarchar
还是 varchar
?
此外,请告诉我它们的性能如何。它们的性能相同还是不同?因为空间不是太大的问题,问题在于性能。
我正在存储名字和姓氏,每个字段最多30个字符。哪种更好:varchar
还是 nvarchar
?
我了解到,nvarchar
占用的空间是 varchar
的两倍,并且 nvarchar
用于国际化。
所以你建议我使用什么: nvarchar
还是 varchar
?
此外,请告诉我它们的性能如何。它们的性能相同还是不同?因为空间不是太大的问题,问题在于性能。
nvarchar基本上表示您可以处理许多字母表,而不仅仅是普通英语。从技术上讲,它意味着支持Unicode,而不仅仅是ANSI。这意味着双字节字符或大约两倍的空间。如今,磁盘空间非常便宜,您最好从一开始就使用nvarchar,而不是在产品寿命周期中进行更改。
如果您确定只需要支持一种语言,则可以使用varchar,否则我建议使用nvarchar。
此前在Stack Overflow上已经讨论过此问题here。
编辑:根据评论更改为ANSI,而不是ASCII。
nvarchar
存储 Unicode 数据,而 varchar
存储 ANSI(8 位)数据。它们的功能相同,但 nvarchar 占用的空间是 varchar 的两倍。varchar
数据类型来存储用户名,除非这些名称包含超出 varchar
可以存储的字符范围之外的字符。LATIN_CS_AS
,则无法在 varchar
字段中存储俄语字符。但是,如果您正在开发仅在俄罗斯使用的本地应用程序,则应将数据库排序规则设置为俄语。这样做可以允许您在 varchar
字段中输入俄语字符,从而节省一些空间。我读到过nvarchar比varchar要多占用两倍的空间。
是的。
nvarchar用于国际化。
是的。
你建议我使用nvarchar还是varchar?
这取决于具体应用。
默认情况下使用nvarchar。现在很少有理由使用varchar,而使用nvarchar则有充分的理由(允许使用国际字符;如前所述)。
varchar 每个字符占用 1 字节,nvarchar 每个字符占用 2 字节。
nvarchar 使用的空间更多,但允许使用的字符更多。额外的空间可以忽略不计,但您将来可能会需要这些额外的字符。即使您不希望进行国际化,人们的姓名中通常也会包含非英语字符(例如 é、ñ 或 ö)。
我建议您使用 nvarchar。
nvarchar 可以存储任何 Unicode 字符,例如来自非拉丁脚本(阿拉伯语、中文等)的字符。我不确定您的应用程序将如何获取数据(通过 Web、GUI 工具包等),但您使用的任何技术都可能支持 Unicode。这意味着对于任何用户输入的数据(例如名称),现在或将来 始终 存在接收非拉丁字符的可能性。
如果我正在构建一个新应用程序,我会使用 nvarchar。如果您愿意,可以称其为“未来证明”。
需要存储的数据:"Sunil"
varchar(5) 占用 7B nvarchar(5) 占用 12B
nvarchar 类型是 Unicode 编码,可以处理地球上任何语言中存在的字符。这些字符以 UTF-16 或 UCS-2 编码存储(不确定是哪种,差别微小),所以每个字符使用两个字节。
varchar 类型使用 8 位字符集,因此受限于您为字段选择的字符集中的 255 个字符。有不同的字符集可以处理不同的字符组,因此通常对于本地文本来说足够了。
如果 varchar 可以完成您想要做的工作,则应使用它。它需要更少的数据,因此总体上略微更快。如果您需要处理各种字符,请使用 nvarchar。
关于性能:
使用varchar而不是nvarchar的原因之一是你可以在索引中拥有两倍的字符!索引键限制为900个字节
关于可用性:
如果应用程序只面向英语受众并包含英语名称,请使用varchar