使用SQL Server生成编码UTF-8的XML
问题描述:
我想用UTF-8编码生成XML。但是默认情况下它是在UCS-2中生成的。使用SQL Server生成编码UTF-8的XML
请帮我用UTF-8编码生成XML。下面是我的查询:
select
isnull(cast('5678' as nvarchar(50)),'') [Vlootnummer],
isnull((select top 1 cast(EngineNo as nvarchar(50))
from VTS_DEMO.dbo.VehicleDetails v
join VTS_DEMO.dbo.VehicleDevice vd on v.VehicleId = vd.VehicleId
and ObuID = '353234023894171'), '') as Kenteken,
isnull((select top 1 cast(FillingStationName as nvarchar(50)) Units
from VTS_DEMO.dbo.FillingStation
where GeoFenceId = 3655),'') Locatie,
isnull((select top 1 GeofenceCode
from VTS_DEMO.dbo.GeoFence
where GeoFenceId = 3655), '') GeoFencingID,
isnull(cast(case when 1 = 0 then '' else '2017-02-07T23:15:25Z' end as nvarchar(50)),'') Aankomsttijd,
isnull(cast(case when 1 = 0 then '2017-02-07T23:15:25Z' else NULL end as nvarchar(50)),'') Vertrektijd
FOR XML PATH('Notificatie')
当我使用存储过程msdb.dbo.sp_send_dbmail
,当它在记事本中打开邮件发送此XML作为附件++话,就说明UCS-2
。
答
根据MSDN documentation,这是对MS SQL Server上的XML
数据类型的限制。 SQL Server总是保存一个XML
数据类型,其字符编码为UCS-2
。
例如,在XML数据类型实例中存储XML数据时,不会保留XML声明PI。这是设计。数据转换为xml类型后,XML声明()及其属性(版本/编码/独立)将丢失。 XML声明被视为XML解析器的指令。 XML数据在内部存储为ucs-2。 XML实例中的所有其他PI都被保留。
考虑到上述情况,您可以手动添加此功能以生效。 在试图做到这一点,你可以使用下面的方法获得的FOR XML
SELECT CAST((SELECT [Columns] FROM [Tables] FOR XML AUTO) AS VARCHAR(MAX)) AS xmldata
优势,您可以检查this的答案与此类似的讨论。
希望这会有所帮助!
SQL Server(不包括2016版)不支持** UTF-8 ... –