MS SQL XQuery xs:base64Binary returns NULL
MS SQL XQuery xs:base64Binary returns NULL
我(必须)使用 base64Binary
将我的 base64 编码字符串转换为字节。在大多数情况下,它工作得很好,但有时它 returns NULL 。
例如,这就像一个魅力:
DECLARE @Base64String VARCHAR(MAX)
SET @Base64String = 'qwerqwerqwerqwer'
declare @Base64Binary VARBINARY(MAX)
set @Base64Binary = cast('' as xml).value('xs:base64Binary(sql:variable("@Base64String"))', 'VARBINARY(max)');
select @Base64Binary as 'base64'
结果是 0xAB07ABAB07ABAB07ABAB07AB
,这对我来说没问题。
但是如果我设置 SET @Base64String = 'qwerqwerqwerqwe='
那么我会得到 NULL
作为结果。为什么?我传递了非常有效的 base64 字符串并且期望不是空值。我试图找到一些解决方法,但没有运气。我怎样才能使这些输入字符串的 xs:base64Binary
到 return 有效 varbinary 值?
稍微看了一下,我建议 qwerqwerqwerqwe=
不是有效的 base64 字符串。
在 C# 中使用 base64 转换工具解码 qwerqwerqwerqwe=
呈现以下内容:
0xAB07ABAB07ABAB07ABAB07
在 SQL 服务器中对此进行编码实际上给出了输出 qwerqwerqwerqwc=
:
DECLARE @Base64String VARCHAR(MAX)
DECLARE @Base64Binary VARBINARY(MAX)
SET @Base64Binary = 0xAB07ABAB07ABAB07ABAB07
PRINT @Base64Binary
SET @Base64String = CAST('' AS XML).value('xs:base64Binary(sql:variable("@Base64Binary"))', 'VARCHAR(max)');
PRINT @Base64String
我建议 SQL 服务器向您返回 NULL
的原因是您使用的 base64 字符串实际上无效。
我(必须)使用 base64Binary
将我的 base64 编码字符串转换为字节。在大多数情况下,它工作得很好,但有时它 returns NULL 。
例如,这就像一个魅力:
DECLARE @Base64String VARCHAR(MAX)
SET @Base64String = 'qwerqwerqwerqwer'
declare @Base64Binary VARBINARY(MAX)
set @Base64Binary = cast('' as xml).value('xs:base64Binary(sql:variable("@Base64String"))', 'VARBINARY(max)');
select @Base64Binary as 'base64'
结果是 0xAB07ABAB07ABAB07ABAB07AB
,这对我来说没问题。
但是如果我设置 SET @Base64String = 'qwerqwerqwerqwe='
那么我会得到 NULL
作为结果。为什么?我传递了非常有效的 base64 字符串并且期望不是空值。我试图找到一些解决方法,但没有运气。我怎样才能使这些输入字符串的 xs:base64Binary
到 return 有效 varbinary 值?
稍微看了一下,我建议 qwerqwerqwerqwe=
不是有效的 base64 字符串。
在 C# 中使用 base64 转换工具解码 qwerqwerqwerqwe=
呈现以下内容:
0xAB07ABAB07ABAB07ABAB07
在 SQL 服务器中对此进行编码实际上给出了输出 qwerqwerqwerqwc=
:
DECLARE @Base64String VARCHAR(MAX)
DECLARE @Base64Binary VARBINARY(MAX)
SET @Base64Binary = 0xAB07ABAB07ABAB07ABAB07
PRINT @Base64Binary
SET @Base64String = CAST('' AS XML).value('xs:base64Binary(sql:variable("@Base64Binary"))', 'VARCHAR(max)');
PRINT @Base64String
我建议 SQL 服务器向您返回 NULL
的原因是您使用的 base64 字符串实际上无效。