varchar中用于Unicode字符的字节数

问题描述 投票:0回答:2

一个常见的误解是认为CHAR(n)和VARCHAR(n),n定义了字符数。但是在CHAR(n)和VARCHAR(n)中,n定义了以字节为单位的字符串长度(0-8,000)。 n永远不会定义可以存储的字符数

根据Microsoft的此声明,我假设n是字符串的数据长度,当我们在varchar中存储unicode字符时,单个字符应占用2个字节。但是,当我尝试以下示例时,我看到varchar数据占用1个字节而不是2个字节。

declare @varchar varchar(6), @nvarchar nvarchar(6)

set @varchar = 'Ø'

select @varchar as VarcharString, len(@varchar) as VarcharStringLength, DATALENGTH(@varchar) as VarcharStringDataLength

Query Result

有人可以解释其背后的原因吗?

sql-server varchar sqldatatypes nvarchar
2个回答
0
投票

我认为original quote有点混乱,继续进行

误解是因为使用单字节编码时,CHAR和VARCHAR的存储大小为n个字节,并且字符也是n。

但是因为它提到了encodings,所以我的猜测是该语句指向UTF encodings supported in SQL Server 2019及更高版本,这似乎允许(我尚未尝试)将Unicode存储在VARCHAR列中。


0
投票
declare @char varchar(4)
declare @nvarchar nvarchar(4)

Set @char = '@'
Set @nvarchar = '@'

select @char as charString, 
LEN(@char) as charStringLength,
DATALENGTH(@char) as charStringDataLength

select @nvarchar as nvarcharString, 
LEN(@nvarchar) as nvarcharStringLength,
DATALENGTH(@nvarchar) as nvarcharStringDataLength
© www.soinside.com 2019 - 2024. All rights reserved.