我正在我的学校使用SQL Server 2005为一个小型web应用程序开发数据库。 我在varchar vs nvarchar的问题上看到了几个学派的思想:

使用varchar,除非你要处理大量国际化的数据,否则就使用nvarchar。 只要用nvarchar就可以了。

我开始看到观点二的优点了。我知道nvarchar占用了两倍的空间,但这并不一定是一个大问题,因为它只存储几百个学生的数据。对我来说,不担心它,允许所有东西都使用nvarchar似乎是最简单的方法。还是我遗漏了什么?


当前回答

Nvarchar将在内存、存储、工作集和索引方面有很大的开销,所以如果规格规定它真的永远都不需要,那就别费心了。

我不会有一个硬性的“总是nvarchar”规则,因为它在许多情况下完全是浪费——特别是来自ASCII/EBCDIC的ETL或标识符和代码列,它们通常是键和外键。

另一方面,有很多列的情况,在这些情况下,我肯定会在早期提出这个问题,如果我没有立即得到一个明确而快速的答案,我将使列为nvarchar。

其他回答

我在工作中经常遇到这样的问题:

库存和定价的FTP提要-当varchar工作正常时,项目描述和其他文本是在nvarchar中。将这些文件转换为varchar可以将文件大小减少近一半,并且对上传非常有帮助。 上面的场景工作得很好,直到有人在商品描述中添加了一个特殊字符(可能是商标,不记得了)

我还是不会每次都用varchar。如果有任何疑问或特殊字符的潜力,我使用nvarchar。我发现,当我100%控制填充字段的内容时,我主要使用varchar。

Nvarchar将在内存、存储、工作集和索引方面有很大的开销,所以如果规格规定它真的永远都不需要,那就别费心了。

我不会有一个硬性的“总是nvarchar”规则,因为它在许多情况下完全是浪费——特别是来自ASCII/EBCDIC的ETL或标识符和代码列,它们通常是键和外键。

另一方面,有很多列的情况,在这些情况下,我肯定会在早期提出这个问题,如果我没有立即得到一个明确而快速的答案,我将使列为nvarchar。

由于您的应用程序很小,使用nvarchar与使用varchar相比,基本上没有明显的成本增加,而且如果您需要存储unicode数据,您也省去了潜在的麻烦。

总是使用nvarchar。

对于大多数应用程序,您可能永远都不需要双字节字符。但是,如果您需要支持双字节语言,而您的数据库模式中只有单字节支持,那么返回并在整个应用程序中进行修改是非常昂贵的。

将一个应用程序从varchar迁移到nvarchar的成本将远远超过在大多数应用程序中使用的一点点额外磁盘空间。

如果您使用NVARCHAR只是因为系统存储过程需要它,最常见的情况是莫名其妙的sp_executesql,并且您的动态SQL非常长,那么从性能角度来看,您最好在VARCHAR中进行所有字符串操作(连接、替换等),然后将最终结果转换为NVARCHAR并将其输入到proc参数中。所以,不要总是使用NVARCHAR!