我们可以在varchar
中存储多语言文本吗?我曾经相信,对于这些场景,我们需要有一个nvarchar
,但是当我尝试下面的代码时,它工作正常。SQL Server中varchar中的多种语言
DECLARE @name VARCHAR(100)
SET @name='Hej mit navn er Vaibhav'
SELECT @name
所以我应该采取varchar
或nvarchar
存储多语言文本。
我们可以在varchar
中存储多语言文本吗?我曾经相信,对于这些场景,我们需要有一个nvarchar
,但是当我尝试下面的代码时,它工作正常。SQL Server中varchar中的多种语言
DECLARE @name VARCHAR(100)
SET @name='Hej mit navn er Vaibhav'
SELECT @name
所以我应该采取varchar
或nvarchar
存储多语言文本。
nvarchar
商店Unicode字符(它支持更多的字符),varchar
没有。由于'Hej mit navn er Vaibhav'
不包含任何Unicode字符,它工作得很好。
所以我应该采取varchar或nvarchar来存储多语言文本。
这取决于你的情况。 nvarchar
需要比varchar
多一倍的空间,所以如果你有一个大型的数据库,并且你永远不需要存储额外的字符集,那么varchar
将是合理的。然而,对于拥有较小数据库的用户而言,空间可能不成问题,您可能更愿意使用额外的空间来允许将来使用Unicode字符。
由于具体询问多语种文字,我想说您可能会遇到varchar
无法存储的字符。
请注意,在2008 R2 +(不幸的是企业版)中使用Unicode压缩时,nvarchar与varchar在很大程度上是没有意义的,除非您在任何给定的Unicode字符序列中有大量数字和广泛的差异页。否则,nvarchar将压缩所有非Unicode字符,就像它们是varchar一样。 –
@AaronBertrand我不知道。谢谢! –
因此请使用nvarchar数据类型
DECLARE @name NVARCHAR(100)
SET @name=N'Hej mit navn er Vaibhav'
SELECT @name
如果你真的不需要它,那么你浪费了100%的空间 - 每个'nvarchar'字符串总是使用两倍于'varchar'字符串的存储空间。这些额外的字节必须存储,从磁盘加载,通过网络传递...... –
@marc_s true除非使用Unicode压缩(请参阅我的其他评论)。 –
@AaronBertrand:啊 - 有趣!谢谢。没有意识到2008 R2的新功能! –
'varchar'是罚款,只要你不需要Unicode支持 - 对于像希伯来语,阿拉伯语,斯拉夫语,中国,日本,韩国等语言**注意: **'nvarchar'总是为每个字符使用2个字节 –