使用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

+0

SQL Server(不包括2016版)不支持** UTF-8 ... –

根据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的答案与此类似的讨论。

希望这会有所帮助!