在SQL Server中,从xml类型到varbinary的默认转换使用XML文本编码(带有斜角括号的开始和结束标记等),使用UTF-16字符编码。 E.g。
declare @xml xml = '<foo><bar>abc</bar></foo>';
declare @foo varbinary(max);
set @foo = CONVERT(varbinary(max), @xml, 2);
select @foo
收率:
0xFFFE3C0066006F006F003E003C006200610072003E006100620063003C002F006200610072003E003C002F0066006F006F003E00
注意零,表示双字节字符。有没有办法转换成UTF-8?
答案 0 :(得分:1)
也许这不是最好的方法,但我先解决了将xml转换为varchar
的问题:
declare @xml xml = '<foo><bar>abc</bar></foo>';
declare @xmlvarchar varchar(max) = CONVERT(varchar(max), @xml)
declare @foo varbinary(max) = CONVERT(varbinary(max), @xmlvarchar);
select @foo
输出结果为:
0x3C666F6F3E3C6261723E6162633C2F6261723E3C2F666F6F3E
当然,varchar取决于您的数据库排序规则,在我的情况下(非特殊字符),此解决方案可以正常运行。