首页 文章

在存储数据时,什么并不总是使用nvarchar over varchar?

提问于
浏览
2

我 Build 了一个网站,其中可能有客户端未指定的unicode字符,我想在sql server上使用nvarchar作为数据类型 . 使用nvarchar over varchar是否有任何缺点 .

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

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

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的严格超集 .

相关问题