SQL Server:如何将XML变量转换为UTF-8编码的varbinary(max)?

时间:2013-12-19 18:43:28

标签: sql-server xml utf-8 utf-16

在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?

1 个答案:

答案 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取决于您的数据库排序规则,在我的情况下(非特殊字符),此解决方案可以正常运行。