【问题标题】:SQL Server: How to convert an XML variable to UTF-8 encoded varbinary(max)?SQL Server:如何将 XML 变量转换为 UTF-8 编码的 varbinary(max)?
【发布时间】:2014-01-08 11:18:29
【问题描述】:
在 SQL Server 中,从 xml 类型到 varbinary 的默认转换使用使用 UTF-16 字符编码的 XML 文本编码(带尖括号的开始和结束标记等)。例如
declare @xml xml = '<foo><bar>abc</bar></foo>';
declare @foo varbinary(max);
set @foo = CONVERT(varbinary(max), @xml, 2);
select @foo
产量:
0xFFFE3C0066006F006F003E003C006200610072003E006100620063003C002F006200610072003E003C002F0066006F006F003E00
注意零,表示双字节字符。有没有办法转成UTF-8?
【问题讨论】:
标签:
sql-server
xml
utf-8
utf-16
【解决方案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 取决于您的数据库排序规则,在我的情况下(非特殊字符),此解决方案非常有效。