我正在存储名称和姓氏,每个名称最多30个字符。哪一个更好varchar
或nvarchar
。varchar或nvarchar
我读过nvarchar
占用的空间是varchar
的两倍,而nvarchar
用于国际化。
那么你应该使用什么建议:nvarchar
或varchar
?
也请让我知道两者的表现。两者的性能是相同还是性能不同。因为空间不是太大的问题。问题是表现。
我正在存储名称和姓氏,每个名称最多30个字符。哪一个更好varchar
或nvarchar
。varchar或nvarchar
我读过nvarchar
占用的空间是varchar
的两倍,而nvarchar
用于国际化。
那么你应该使用什么建议:nvarchar
或varchar
?
也请让我知道两者的表现。两者的性能是相同还是性能不同。因为空间不是太大的问题。问题是表现。
基本上,nvarchar意味着你可以处理大量的字母,而不仅仅是普通的英语。从技术上讲,它意味着unicode支持,而不仅仅是ANSI。这意味着双倍宽度的字符或大约两倍的空间。现在,磁盘空间非常便宜,您不妨从一开始就使用nvarchar,而不是经历在产品生命周期中不得不改变的痛苦。
如果您确定只需要支持一种语言,您可以使用varchar,否则我会使用nvarchar。
这已在here之前的SO上讨论过。
EDITED:将ascii更改为ANSI,如注释中所述。
是nitpicky:实际上,VARCHAR存储ANSI数据 - 8位,通常基于代码页,如西欧或冰岛或任何你需要的:-)它是ANSI - 8位 - 不是ASCII码(= 7位) – 2009-08-13 11:41:09
首先,为了澄清,nvarchar
存储unicode数据,而varchar
存储ANSI(8位)数据。它们的功能相同,但nvarchar占用了两倍的空间。
通常,我更喜欢使用varchar
数据类型来存储用户名称,除非这些名称的字符超出了varchar
可存储的字符边界。
它也依赖于数据库排序规则。对于例如如果数据库排序规则为LATIN_CS_AS
,则无法将俄语字符存储在varchar
字段中。但是,如果您正在使用仅用于俄罗斯的本地应用程序,则会将数据库归类设置为俄语。这将做的是,它将允许您在varchar
字段中输入俄语字符,节省一些空间。
但是,现在大部分正在开发的应用程序都是国际化的,因此您必须决定哪些用户将注册,并根据这些决定数据类型。
默认情况下使用nvarchar。现在几乎没有什么理由去使用varchar,并且每种理由都需要使用nvarchar(允许使用国际字符;正如讨论的那样)。
varchar是每个字符1个字节,nvarchar是每个字符2个字节。
您将在nvarchar中使用更多空间,但还有更多允许的字符。额外的空间可以忽略不计,但你可能会错过未来的额外人物。即使您不希望国际化,人们的名字中通常会有非英文字符(例如é,ñ或ö)。
我建议你使用nvarchar。
nvarchar类型是Unicode,因此它可以处理地球上每种语言中存在的任何字符。这些字符存储为UTF-16或UCS-2(不确定是哪一个,差别很小),因此每个字符使用两个字节。
varchar类型使用8位字符集,因此它被限制为您为字段选择的字符集的255个字符。有不同的字符集可处理不同的字符组,因此通常足够用于某个国家或地区的本地文本。
如果varchar适用于你想要做的事情,你应该使用它。它的数据少一点,所以整体上稍微快一点。如果您需要处理各种字符,请使用nvarchar。
我有红认为,为nvarchar需要两倍的varchar
是。据微软称:“存储大小,以字节为单位,是输入的字符数+ 2字节的两倍”(http://msdn.microsoft.com/en-us/library/ms186939(SQL.90).aspx)。
但是存储很便宜;我从不担心几个额外的字节。
此外,在未来节省自己的麻烦,并将最大宽度设置为更大方,比如100个字符。当你使用varchar或nvarchar(而不是char/nchar)时,这绝对没有存储开销。你永远不知道什么时候你会遇到一个超过30个字符的三重姓氏或长外国名字。
nvarchar用于国际化。
nvarchar可以存储任何unicode字符,例如来自非拉丁脚本(阿拉伯文,中文等)的字符。我不确定你的应用程序将如何获取数据(通过网页,通过GUI工具包等),但很可能您使用的任何技术都支持unicode开箱即用。这意味着对于任何用户输入的数据(例如名称),总是有接收非拉丁字符的可能性,如果不是现在,那么在将来。
如果我正在构建一个新的应用程序,我会使用nvarchar。如果你喜欢,称它为“面向未来的”。
性能:
一个理由使用VARCHAR超过nvarchar的是,你可以在你的指标的两倍多字符!索引键被限制为900个字节
可用性:
应用程序是否永远只能用于一个英语观众&包含英文名称,使用VARCHAR
从不遇到超过450个字符长度的索引。 – zszep 2011-03-26 07:44:51
数据存储:“苏尼尔”
VARCHAR (5)需要7B nvarchar(5)需要12B
http://stackoverflow.com/questions/35366/varchar-vs-nvarchar-performance – 2009-08-13 11:51:00