我正在设计一个数据库方案,我认为只是为了安全我应该使用nvarchar作为我的文本列的数据类型(用于unicode支持)。虽然我不期望非英语文本,但我认为最好从一开始就支持它,以防万一。
我有什么理由坚持使用普通varchar吗?性能
答案 0 :(得分:11)
在今天的i18n世界中,nvarchar非常有意义。 varchar可能对指定的数据不是unicode有意义(可能你有一些系统字段需要是ASCII)。
我默认使用nvarchar来表示名称,描述,地址等等。
varchar
较小,因此varchar
超过nvarchar
可能会节省一些IO(但请注意,代码页也会成为一个更大的问题)。
答案 1 :(得分:4)
另请参阅此问题:VARCHAR vs NVARCHAR performance.
就个人而言,我说坚持varchar(正如我在这个帖子中回答的那样)。有一个非平凡的性能开销。
答案 2 :(得分:2)
我们几乎所有东西都使用VARCHAR,偶尔也只使用NVARCHAR。
产品代码不需要NVarchar - 我们不允许除A-Z,0-9和“_”以外的任何内容......
它是存储空间的两倍,但每个索引页面(和每个数据页面)只有一半的条目,一半的内存缓存“浪费”,比较数据的CPU周期更多,等等。
IME常用的外来口音可以在Varchar中找到(即LATIN-1)。我们没有计划做中文或其他替代字符集,当我们能够通过从第一天使用NVarchar来处理该字符时,我们最不担心的是 - 从右到左或垂直对齐的文本? :(
如果您允许NVarchar,比如名称,您将如何从键盘输入扩展的charcater?如果您导入数据(因此它已经是NVarchar),您将如何使用标准QWERTY键盘搜索该客户。涉及国际化应用程序的很多很多,所以我认为没有必要“通过使用NVarchar来允许它。”
但是我有很多地方可以使用NVarchar ...而且大多数列也是50个字符......他们必须知道人口增长和邮政编码的扩展计划,我不知道! !
答案 3 :(得分:1)
是的,性能,大小。 nvarchar需要更多的字节,我认为它是双倍的(如果我错了,请纠正我)这是因为unicode支持。因此,如果您不需要unicode支持,请使用常规varchar。
答案 4 :(得分:1)
如上所述,权衡取决于未来与绩效的对比。根据我的经验,SQL Server在较低的CPU和内存限制方面做得相当不错,但是它给它一个缓慢的磁盘I / O并且它真的可以突然显现。
如果您没有双字节字符集(即中文字符)的计划,请坚持使用VARCHAR(MAX)。
答案 5 :(得分:0)
一般来说;从具有最少约束的最昂贵数据类型开始。把它投入生产。如果性能开始成为问题,请找出实际存储在那些nvarchar列中的内容。是否有任何字符不适合varchar?如果没有,请切换到varchar。在你知道疼痛在哪里之前,不要试图预先优化。我的猜测是nvarchar / varchar之间的选择不会在可预见的未来减慢你的应用程序的速度。应用程序的其他部分将进行性能调优,为您带来更多的收益。