我正在构建一个可能有客户端未指定的unicode字符的网站,我想在sql server上使用nvarchar作为数据类型。使用nvarchar over varchar是否有任何缺点。
如果nvarchar可以容纳varchar的更多字符,为什么有人想要在nvarchar上使用varchar。使用nvarchar的唯一缺点是nvarchar中的数据会比varchar更大吗?
Nvarchar还可以存储varchar存储的所有字符吗?
答案 0 :(得分:4)
我认为你所做的(间接)观点是你几乎总是想要使用它。一般来说,最好从一开始就接受unicode数据,否则你最终会遇到一些你不想要的遗留问题。对于预期的输入,你会感到惊讶。系统习惯于变得比预期的更大,需要处理国际化的输入。您需要限制某些字段。例如,如果您要存储域名,那么跨多个语言系统的支持可能仍然不可靠(它正在处理),因此您需要限制输入这样的事情。在这些情况下,您需要将输入限制在更高级别,例如通过UI级别的正则表达式,否则如果您在数据库中声明了varchar字段,那么您最终将完全使用错误的字符如果unicode角色确实设法通过存储。
现在空间不是问题,但是存在性能方面的考虑,尽管不太可能超出可扩展性的需求:
https://msdn.microsoft.com/en-us/library/ms189617.aspx
关键的一点是,您需要明确指定您在整个应用程序层中始终使用UTF-8 以获得全面的国际支持。
答案 1 :(得分:3)
选择数据类型与科学一样重要。但是当它归结为它时,你选择的类型意味着约束。例如,我不会选择nvarchar(50)来存储美国邮政编码。因此,不要盲目选择nvarchar,因为它更宽松 - 这不是一个功能!选择nvarchar是因为您合法地认为该字段需要容纳Unicode字符。也就是说,它可能不适用于所有列。
至于你的第二个问题,nvarchar是varchar的严格超集。