2017-01-19 11 views
0

XML文書がTEXT列(collat​​ion_name French_CI_AS、character_set_name iso_1)に格納されています。TEXT列からSQL ServerのXML列に挿入する方法2014

私は、高ASCII文字にその点、私はこれを行うと、私は文字エンコーディングエラーが発生します

INSERT INTO Signature(JustifId, SignedJustif) 
    SELECT JustifID, CONVERT(XML, Justif.SignedJustif,2) 
    FROM Justif 

...次のSQLを使用してXML列に、新しいテーブルに移動したいですOU = CERES、O = FNMT-RCM、C = ES」 - X509証明書のスペイン語アクセント記号。

これはutf8での生活を始め、.net文字列としてutf16になり、次にTEXT列に挿入するとiso_1になりました。コピーしてウェブページに貼り付けても問題ありません。どのようにすれば、TEXT列から同じDBのXML列に移動するのですか(、これはなぜ難しいのですか?)?

CONVERTのアイデアはthis投稿から来ました。 This MSページでは、varcharとnvarcharからXMLを作成しています。それでも問題が出る場合

+1

テキスト列は使用しないでください。それらは推奨されなくなりました。代わりにvarchar(max)を使用してください。 –

+0

@ZoharPeled確かに、これがこの問題の理由です。 (うまくいけば)OPはこれらの非難された列を取り除きたいと思って、XMLを適切なタイプで保存したいと思っています。 – Shnugo

+0

テキスト列のSQL Server照合とは何ですか? –

答えて

2

これはトリッキーです...バイトレベルでの変換は、予期しない結果になるかもしれません...

一緒に特定の照合を指定しようと、この

INSERT INTO Signature(JustifId, SignedJustif) 
SELECT JustifID, CONVERT(XML, CONVERT(VARCHAR(MAX),Justif.SignedJustif)) 
FROM Justif 

をお試しください変換を行い、NVARCHAR(MAX)に変換してください。

これで問題が解決しない場合は、質問を編集して(縮小した)例を投稿してください。最善の策は、エラーを再現できる最小限のXMLを使用したテストシナリオでした。

+0

特定の文字にVARCHAR(MAX)ではなくNVARCHAR(MAX)を使用します。 –

+0

@IgorMicev、確かにわからない。現時点では、私はこれをテストする可能性がありません。ソーステキストは 'NTEXT'ではなく' TEXT'です...変換がどのようにスマートであるかはわかりません。さらに詳しく: 'TEXT'に格納されたXMLにXML宣言が含まれていれば(これは見ていない)、エンコーディングを' utf-8'と指定すると、これはうまくいかないでしょう...しかしあなたは正しい'XML'は第2に' NVARCHAR(MAX) 'として、またまれに' VARCHAR(MAX) 'としてのみ' XML'として扱われるべきです。 *アクセント付きの 'ó'のような通常の*特殊文字は' VARCHAR'でも使えるはずです... – Shnugo

+0

私のドキュメントには明示的なutf-8エンコーディングのXML宣言がありました。仕事はしていますが、今はビジネスに就いています。 Yahoo。 – bbsimonbb