为什么存储数据时不总是在varchar上使用nvarchar?

问题描述 投票:3回答:2

我正在建立一个可能没有指定客户端Unicode字符的网站,我想在SQL Server上使用nvarchar作为数据类型。在varchar上使用nvarchar有任何不利之处。

如果nvarchar可以在varchar中容纳更多字符,为什么有人要在nvarchar上使用varchar。使用nvarchar的唯一缺点是nvarchar中的数据会比varchar大吗?

Nvarchar还可以存储varchar存储的所有字符吗?

sql-server encoding varchar nvarchar
2个回答
4
投票

我认为您要指出的(间接)要点是,您几乎总是想使用它。通常,最好从一开始就开始接受unicode数据,否则您将遭受不必要的传统麻烦。您会惊讶于您对预期输入的忽略。而且系统有变得比您期望的更大的习惯​​,并且需要处理国际化的输入。您需要限制某些字段。例如,如果您要存储域名,那么跨系统支持多语言字符可能仍然不可靠(正在开发中),因此您需要限制诸如此类的输入。在这种情况下,您需要将输入限制在较高的级别,例如通过UI级别的正则表达式,否则,如果您在数据库中声明了varchar字段,则最终只会得到完全错误的字符如果unicode字符确实可以通过,则将其存储。

如今,空间已不是问题,但是出于性能考虑,尽管场景不可能超过可伸缩性的需求:

https://msdn.microsoft.com/en-us/library/ms189617.aspx

一个关键点是,您需要在整个应用程序层中明确指定正在使用UTF-8 一致地,以获得全面的国际支持。


3
投票

选择数据类型与科学一样多。但是,归根结底,您选择的类型意味着一个约束。例如,我不会选择nvarchar(50)来存储美国邮政编码。因此,不要盲目选择nvarchar,因为它比较宽松-这不是功能!选择nvarchar是因为您有理由相信该字段将需要容纳Unicode字符。也就是说,它可能不适用于您所有的列。

关于第二个问题,nvarchar是varchar的严格超集。

© www.soinside.com 2019 - 2024. All rights reserved.