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 字符串实际上无效。