2012-07-03 65 views
2

我们可以在varchar中存储多语言文本吗?我曾经相信,对于这些场景,我们需要有一个nvarchar,但是当我尝试下面的代码时,它工作正常。SQL Server中varchar中的多种语言

DECLARE @name VARCHAR(100) 
SET @name='Hej mit navn er Vaibhav' 
SELECT @name 

所以我应该采取varcharnvarchar存储多语言文本。

+1

'varchar'是罚款,只要你不需要Unicode支持 - 对于像希伯来语,阿拉伯语,斯拉夫语,中国,日本,韩国等语言**注意: **'nvarchar'总是为每个字符使用2个字节 –

回答

3

nvarchar商店Unicode字符(它支持更多的字符),varchar没有。由于'Hej mit navn er Vaibhav'不包含任何Unicode字符,它工作得很好。

所以我应该采取varchar或nvarchar来存储多语言文本。

这取决于你的情况。 nvarchar需要比varchar多一倍的空间,所以如果你有一个大型的数据库,并且你永远不需要存储额外的字符集,那么varchar将是合理的。然而,对于拥有较小数据库的用户而言,空间可能不成问题,您可能更愿意使用额外的空间来允许将来使用Unicode字符。

由于具体询问多语种文字,我想说您可能会遇到varchar无法存储的字符。

+3

请注意,在2008 R2 +(不幸的是企业版)中使用Unicode压缩时,nvarchar与varchar在很大程度上是没有意义的,除非您在任何给定的Unicode字符序列中有大量数字和广泛的差异页。否则,nvarchar将压缩所有非Unicode字符,就像它们是varchar一样。 –

+0

@AaronBertrand我不知道。谢谢! –

1

因此请使用nvarchar数据类型

DECLARE @name NVARCHAR(100) 
SET @name=N'Hej mit navn er Vaibhav' 
SELECT @name 
+2

如果你真的不需要它,那么你浪费了100%的空间 - 每个'nvarchar'字符串总是使用两倍于'varchar'字符串的存储空间。这些额外的字节必须存储,从磁盘加载,通过网络传递...... –

+0

@marc_s true除非使用Unicode压缩(请参阅我的其他评论)。 –

+0

@AaronBertrand:啊 - 有趣!谢谢。没有意识到2008 R2的新功能! –