我有一个应用程序从一些用PHP编写的Web服务接收XML并将其插入SQL Server数据库。当我尝试插入包含波兰变音字符的收到的XML时,我收到如下错误:
XML解析:第2行,第703个字符,非法xml字符
我试着这样做:
DECLARE @xml XML;
SET @xml = '(here I paste some sample XML that contains diacritical characters)';
SELECT @xml = CAST(@xmlstr AS XML);
INSERT INTO vos_DirectXML_ut(ValidXML,synchronization_time,synchronization_type,MethodName)
VALUES(@xml,GETDATE(),@SynchroType,@method);
ValidXML
是XML
类型列。
我用谷歌搜索找到一些解决方案,我找到了Utf8String: http://msdn.microsoft.com/en-us/library/ms160893(v=sql.90).aspx
我安装了它,并尝试将XML转换为Utf8String,然后再将其转换为普通varchar
,然后再转换为XML
,并将其插入我的表中,但看起来它没有变化这个XML里面的任何字符,它只是改变了变量的类型,并没有解决我的问题。
我还发现了一些人的建议,通过为变量中的每个字符(在我的情况下为XML)编写循环程序并手动更改其编码,可以解决类似的问题,但是这个人也说它可能有效慢。这真的是解决我问题的唯一选择吗?
答案 0 :(得分:2)
尝试施放到UNICODE:
DECLARE @xmlstr NVARCHAR(MAX) --<--
SELECT @xmlstr = N'(some sample XML that contains diacritical characters)'; --<-- N''
DECLARE @xml XML
SELECT @xml = CAST(@xmlstr AS XML)
INSERT INTO dbo.vos_DirectXML_ut
(
ValidXML
, synchronization_time
, synchronization_type
, MethodName
)
SELECT
@xml
, GETDATE()
, @SynchroType
, @method
答案 1 :(得分:1)
对于XML文件,SQL Server 2008 R2不支持UTF-16,因此对于以
开头的xml文件解析此xml时会出现错误
消息6602,级别16,状态2,过程sp_xml_preparedocument,第1行 错误说明是“从当前编码切换到不支持的指定编码。&#39;。
解决上述错误的简单步骤是使用SQL替换函数
REPLACE(&#39; @ xmldata&#39;,&#39; utf-16&#39;,&#39;&#39;)或REPLACE(&#39; @ xmldata&#39;,&# 39; UTF-16&#39;,&#39; UTF-8&#39)
我使用xml文件处理过3个程序,每当我尝试使用utf-16 XML解析器时都会出错。
始终对SQL Server 2008 R2使用utf-8