Sql server SQL Server:XML中十六进制值的编码?
当我在SQLServer中将十六进制值转储到XML输出中时,例如Sql server SQL Server:XML中十六进制值的编码?,sql-server,xml,Sql Server,Xml,当我在SQLServer中将十六进制值转储到XML输出中时,例如 0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8 我得到: /DNcECEQkcDhcAkP/56jm/XHKQk= 这看起来像是被编码为base64,但我尝试了不同的转换器,无法将第二个值重新转换为第一个值。有人知道SQL Server如何在XML中编码十六进制值吗?一种方法是使用hexToBinary函数: DECLARE @table TABLE(BinaryValue varbina
0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8
我得到:
/DNcECEQkcDhcAkP/56jm/XHKQk=
这看起来像是被编码为base64,但我尝试了不同的转换器,无法将第二个值重新转换为第一个值。有人知道SQL Server如何在XML中编码十六进制值吗?一种方法是使用hexToBinary函数:
DECLARE @table TABLE(BinaryValue varbinary(MAX));
INSERT INTO @table(BinaryValue) VALUES(0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8);
SELECT
CAST('' AS XML).value('xs:hexBinary(sql:column("BinaryValue"))', 'varchar(MAX)') AS HexString
FROM @table;
这将返回不带0x
前缀的十六进制数字字符串:
103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8
一种方法是使用hexToBinary函数:
DECLARE @table TABLE(BinaryValue varbinary(MAX));
INSERT INTO @table(BinaryValue) VALUES(0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8);
SELECT
CAST('' AS XML).value('xs:hexBinary(sql:column("BinaryValue"))', 'varchar(MAX)') AS HexString
FROM @table;
这将返回不带0x
前缀的十六进制数字字符串:
103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8
看起来它已被编码为base64,[…]无法重新转换[…]。有人知道SQL Server如何在XML中编码十六进制值吗 这是BLOB(二进制数据)的标准行为。它不是在很早的时候,但是-阿飞-自2005年以来它是: 任何二进制值都隐式转换为
base64
表示:
DECLARE @YourBinary VARBINARY(MAX)=0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8;
DECLARE @xml XML =
(
SELECT @YourBinary FOR XML PATH('test')
);
SELECT @xml;
--返回
可能是,您混淆了真实的二进制值,显示为十六进制字符串,而十六进制字符串实际上是一个字符串(一行字符)
看看数字。在XML中,您可以看到写入的数字,但您肯定知道,数字数据类型不会存储为一行数字。在XML中,任何数据都转换为定义格式的字符串表示形式。读取此数据需要重新转换回原始数据类型
如果你真的需要十六进制字符串作为一行十六进制字符,你可以按照丹·古兹曼的建议去做
更新:针对XML原始数据的或针对XML自动数据的的特殊处理:
在与Bogdan Sahlean讨论之后,我想补充一点,在大多数情况下,您希望对XML路径使用。但是,在某些情况下,可以选择使用显式
、原始
或自动
(尽管这种情况很少见……)。这些模式需要特别标记如何处理二进制数据:
SELECT 0x01 AS x FOR XML RAW, BINARY BASE64 --breaks without ", BINARY BASE64"
一些细节
看起来它已被编码为base64,[…]无法重新转换[…]。
有人知道SQL Server如何在XML中编码十六进制值吗
这是BLOB(二进制数据)的标准行为。它不是在很早的时候,但是-阿飞-自2005年以来它是:
任何二进制值都隐式转换为base64
表示:
DECLARE @YourBinary VARBINARY(MAX)=0x103319FF9ABAF2EC14E1432479DA3CDBC8B2DEF8;
DECLARE @xml XML =
(
SELECT @YourBinary FOR XML PATH('test')
);
SELECT @xml;
--返回
可能是,您混淆了真实的二进制值,显示为十六进制字符串,而十六进制字符串实际上是一个字符串(一行字符)
看看数字。在XML中,您可以看到写入的数字,但您肯定知道,数字数据类型不会存储为一行数字。在XML中,任何数据都转换为定义格式的字符串表示形式。读取此数据需要重新转换回原始数据类型
如果你真的需要十六进制字符串作为一行十六进制字符,你可以按照丹·古兹曼的建议去做
更新:针对XML原始数据的或针对XML自动数据的的特殊处理:
在与Bogdan Sahlean讨论之后,我想补充一点,在大多数情况下,您希望对XML路径使用。但是,在某些情况下,可以选择使用显式
、原始
或自动
(尽管这种情况很少见……)。这些模式需要特别标记如何处理二进制数据:
SELECT 0x01 AS x FOR XML RAW, BINARY BASE64 --breaks without ", BINARY BASE64"
一些细节Me Study在HASHBYTES中输入了错误的字符串,并怀疑是否存在不匹配的值。在今后提问之前,我会进行三次检查。我脸红了。我这个笨蛋在HASHBYTES中输入了错误的字符串,并对不匹配的值感到疑惑。在今后提问之前,我会进行三次检查。我脸红了。除了我的问题是垃圾这一事实之外,我认为这是答案,因为它可能最能解释MS SQL XML编码和转换问题。干杯。除了我的问题是废话之外,我认为这是答案,因为它可能最能解释MS SQL XML编码和转换问题。干杯