Sql server SQL Server中varchar中的多种语言

Sql server SQL Server中varchar中的多种语言,sql-server,multilingual,varchar,nvarchar,Sql Server,Multilingual,Varchar,Nvarchar,我们可以在varchar中存储多语言文本吗?我曾经认为,对于这些场景,我们需要一个nvarchar,但是当我尝试下面的代码时,它工作得很好 DECLARE @name VARCHAR(100) SET @name='Hej mit navn er Vaibhav' SELECT @name 那么我应该使用varchar或nvarchar来存储多语言文本。nvarchar存储字符(支持更多字符),varchar不存储字符。由于'Hej mit navn er Vaibhav'不包含任何Unico

我们可以在
varchar
中存储多语言文本吗?我曾经认为,对于这些场景,我们需要一个
nvarchar
,但是当我尝试下面的代码时,它工作得很好

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

那么我应该使用
varchar
nvarchar
来存储多语言文本。
nvarchar
存储字符(支持更多字符),
varchar
不存储字符。由于
'Hej mit navn er Vaibhav'
不包含任何Unicode字符,因此它可以正常工作

那么我应该使用varchar还是nvarchar来存储多语言文本呢

这取决于你的情况
nvarchar
占用的空间是
varchar
的两倍,因此,如果您有一个大型数据库,并且永远不需要存储额外的字符集,
varchar
将有意义。但是,对于较小的数据库,空间可能不是问题,您可能更愿意使用额外的空间来允许将来使用Unicode字符


由于专门询问多语言文本,我想说您可能会遇到
varchar
无法存储的字符。

nvarchar
存储字符(支持更多字符),
varchar
不存储字符。由于
'Hej mit navn er Vaibhav'
不包含任何Unicode字符,因此它可以正常工作

那么我应该使用varchar还是nvarchar来存储多语言文本呢

这取决于你的情况
nvarchar
占用的空间是
varchar
的两倍,因此,如果您有一个大型数据库,并且永远不需要存储额外的字符集,
varchar
将有意义。但是,对于较小的数据库,空间可能不是问题,您可能更愿意使用额外的空间来允许将来使用Unicode字符

由于专门询问多语言文本,我想说您可能会遇到
varchar
无法存储的字符。

使用Nvarchar数据类型

DECLARE @name NVARCHAR(100) 
SET @name=N'Hej mit navn er Vaibhav' 
SELECT @name 
使用Nvarchar数据类型

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

varchar
只要不需要Unicode支持就可以了-适用于希伯来语、阿拉伯语、西里尔语、汉语、日语、韩语等语言。请注意:
nvarchar
始终为每个字符使用2个字节
varchar
只要不需要Unicode支持就可以了-适用于希伯来语、阿拉伯语、西里尔语、汉语等语言,日文、韩文等。请注意:
nvarchar
总是为每个字符使用2个字节如果您真的不需要它,那么您就浪费了100%的空间-每个
nvarchar
字符串总是使用两倍于
varchar
字符串的存储空间。这些额外的字节必须存储、从磁盘加载、通过网络传递……@marc_是真的,除非使用Unicode压缩(见我的其他评论)。@AaronBertrand:ah-有趣!谢谢不知道2008 R2的新功能!如果您真的不需要它,那么您就浪费了100%的空间-每个
nvarchar
字符串总是使用
varchar
字符串两倍的存储空间。这些额外的字节必须存储、从磁盘加载、通过网络传递……@marc_是真的,除非使用Unicode压缩(见我的其他评论)。@AaronBertrand:ah-有趣!谢谢不知道2008 R2的新功能!请注意,对于2008 R2+中的Unicode压缩(不幸的是,仅限企业版),nvarchar与varchar在很大程度上是没有意义的,除非您在任何给定页面上都有大量不同的Unicode字符序列。否则,nvarchar将压缩所有非Unicode字符,就像它们是varchar一样。@AaronBertrand我不知道这一点。谢谢请注意,对于2008 R2+中的Unicode压缩(不幸的是,仅限企业版),nvarchar与varchar在很大程度上是没有意义的,除非您在任何给定页面上都有大量不同的Unicode字符序列。否则,nvarchar将压缩所有非Unicode字符,就像它们是varchar一样。@AaronBertrand我不知道这一点。谢谢