在检索已存储在varbinary
字段中的文本值并将其转换回文本时,有没有办法确定它是存储为 aVARCHAR
还是NVARCHAR
string?如果它是未知的,告诉CONVERT
函数它是一个NVARCHAR
字符串,当它实际上是VARCHAR
返回乱码。运行以下示例:
IF OBJECT_ID(N'dbo.Temp') IS NOT NULL
DROP TABLE dbo.Temp;
CREATE TABLE Temp(
ID INT IDENTITY(0,1) NOT NULL
,Test VARBINARY(50) NULL
);
INSERT INTO dbo.Temp (Test) VALUES( CONVERT(VARBINARY(50), 'varchar test string'));
INSERT INTO dbo.Temp (Test) VALUES( CONVERT(VARBINARY(50), N'nvarchar test string'));
SELECT CONVERT(VARCHAR, Test) AS [VARCHAR], CONVERT(NVARCHAR, Test) AS [NVARCHAR]
FROM dbo.Temp;
这在一般情况下是不可能的。
0x00
from to和 from to for的完整范围0xFF
是有效的,因此无法区分表示 2 个 varchar 字符或单个字符的两个字节。varchar
0x0000
0xFFFF
nvarchar
nvarchar
0x4141
可能是'AA'
或N'䅁'
如果
DATALENGTH
是奇怪的,那么你知道它是varchar
。0x00
此外,如果文本主要是您的示例中的标准 ASCII,那么当存储为二进制 if 时,它将包含很多内容nvarchar
。这可能不是您期望在
varchar
字符串中合理找到的字符,因此可以将它的存在视为字符串是nvarchar
.