从 NVARCHAR 转换为 VARBINARY 时出现问题
Issue when converting from NVARCHAR to 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
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
第二个returns相同的字符串(值为lost/cut):
_A_Brand1[_1]A5
_A_Brand1[_1]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));
将 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
第二个returns相同的字符串(值为lost/cut):
_A_Brand1[_1]A5
_A_Brand1[_1]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));