Sql server 从NVARCHAR转换为VARBINARY时出现问题

Sql server 从NVARCHAR转换为VARBINARY时出现问题,sql-server,tsql,sql-server-2016,varbinary,Sql Server,Tsql,Sql Server 2016,Varbinary,当将varchar转换为varbinary时,我可以将其还原回去。例如: SELECT CAST('_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY) ,CAST('_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY); 提供两种不同的输出: 0x5F415F4272616E64315B5F315D41355F4C505B5F315D2E4135 0x5F415F4272616E64315B5F315D41355F4C505

当将
varchar
转换为
varbinary
时,我可以将其还原回去。例如:

SELECT CAST('_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY)
      ,CAST('_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY);
提供两种不同的输出:

0x5F415F4272616E64315B5F315D41355F4C505B5F315D2E4135 0x5F415F4272616E64315B5F315D41355F4C505B5F325D2E4135

但是如果我使用
nvarchar
我会得到相同的输出:

SELECT CAST(N'_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY)
      ,CAST(N'_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY);
0x5F0041005F004200720061006E00640031005B005F0031005D0041003500 0x5F0041005F004200720061006E00640031005B005F0031005D0041003500

这是一个问题,因为我以后无法执行正确的操作:

SELECT CAST(CAST('_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY) AS VARCHAR(MAX))
      ,CAST(CAST('_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY) AS VARCHAR(MAX));

SELECT CAST(CAST(N'_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY) AS NVARCHAR(MAX))
      ,CAST(CAST(N'_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY) AS NVARCHAR(MAX));
第一个是可以的:

_A_Brand1[_1]A5_LP[_1].A5
_A_Brand1[_1]A5_LP[_2].A5
第二个返回相同的字符串(值丢失/剪切):


VARBINARY
的默认长度是30,这就是数据被截断的原因

更正代码:

SELECT CAST(CAST(N'_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY(MAX)) AS NVARCHAR(MAX))
      ,CAST(CAST(N'_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY(MAX)) AS NVARCHAR(MAX));

VARBINARY
的默认长度是30,这就是数据被截断的原因

更正代码:

SELECT CAST(CAST(N'_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY(MAX)) AS NVARCHAR(MAX))
      ,CAST(CAST(N'_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY(MAX)) AS NVARCHAR(MAX));