4

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);

ValidXMLXMLタイプ列です。

いくつかの解決策を見つけるためにグーグルで検索したところ、Utf8String が見つかりました: http://msdn.microsoft.com/en-us/library/ms160893(v=sql.90).aspx

私はそれをインストールし、XML を Utf8String に変換してから、それを通常varcharの に変換し、次に に変換XMLして、テーブルに挿入しようとしましたが、この XML 内の文字は変更されないように見えます。変数の型が変更されるだけです。それは私の問題を解決しませんでした。

また、変数(私の場合はXML)のすべての文字に対してループを通過する手順を記述し、エンコーディングを手動で変更することで同様の問題を解決できるという男のアドバイスも見つけましたが、この男は動作が遅くなる可能性があるとも言いました。これは本当に私の問題を解決する唯一のオプションですか?

4

2 に答える 2

1

XML ファイルの場合、UTF-16 は SQL Server 2008 R2 でサポートされていないため、xml ファイルの場合は

このxmlを解析するとエラーが発生します

メッセージ 6602、レベル 16、状態 2、プロシージャ sp_xml_preparedocument、行 1 エラーの説明は、「現在のエンコーディングから指定されたエンコーディングへの切り替えはサポートされていません。」です。

上記のエラーを解決する簡単な手順は、SQL 置換関数を使用することです

REPLACE('@xmldata','utf-16','') または REPLACE('@xmldata','utf-16','utf-8')

xml ファイルを使用して 3 つの手順を実行しましたが、utf-16 XML パーサーを使用しようとするとエラーが発生します。

SQL Server 2008 R2 には常に utf-8 を使用する

于 2014-05-20T09:13:26.037 に答える