SQL Server: как преобразовать переменную XML в varbinary (max) в кодировке UTF-8?

В SQL Server преобразование по умолчанию из типа xml в varbinary использует кодировку текста XML (начальный и конечный теги с угловыми скобками и т. д.) с использованием кодировки символов UTF-16. Например.

declare @xml xml = '<foo><bar>abc</bar></foo>';
declare @foo varbinary(max);
set @foo = CONVERT(varbinary(max), @xml, 2);
select @foo

Урожайность:

0xFFFE3C0066006F006F003E003C006200610072003E006100620063003C002F006200610072003E003C002F0066006F006F003E00

Обратите внимание на нули, обозначающие двухбайтовые символы. Есть ли способ конвертировать в UTF-8?


person redcalx    schedule 19.12.2013    source источник
comment


Ответы (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 зависит от сортировки вашей базы данных, в моем случае (не специальные символы) это решение работает отлично.

person Gustavo F    schedule 19.12.2013