【问题标题】:Issue when converting from NVARCHAR to VARBINARY从 NVARCHAR 转换为 VARBINARY 时出现问题
【发布时间】:2017-06-20 11:31:59
【问题描述】:

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

第二个返回相同的字符串(值丢失/剪切):

_A_Brand1[_1]A5
_A_Brand1[_1]A5

【问题讨论】:

    标签: sql-server tsql sql-server-2016 varbinary


    【解决方案1】:

    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));
    

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      相关资源
      最近更新 更多