3

SQL Server の XML 列に XML を格納しています。SQL Server は、データを内部的に UTF-16 で格納します。したがって、格納される XML は UTF-16 でなければなりません。

私が持っている XML は utf-8 で、上に次の宣言があります。

<?xml version="1.0" encoding="UTF-8" ?>

UTF-8 宣言を使用して xml を挿入しようとすると、エンコードに関する例外が発生します。これは、次の 2 つの方法で簡単に修正できます。

  • 宣言を削除するか、

  • 宣言を次のように変更することによって

:

<?xml version="1.0" encoding="UTF-16" ?>

問題

宣言を削除または置換するだけが「安全」か正しいかはわかりません。データが失われたり、XML が壊れたりすることはありますか? または、C# の文字列を utf-8 から utf-16 に変換する必要がありますか?

4

2 に答える 2

3

C# は、UTF-16 標準の古いバージョンである UCS-2 に文字列を格納します。したがって、C# で UTF-8 文字列を読み取ると、C# はそれを UCS-2 に変換します。これは、SQL Server に送信する UCS-2 バリアントです。

xml 宣言を変更するencoding="UTF-16"か、完全に省略することができます。UCS-2 と UTF-16 にはいくつかの違いがあります。それが C# と SQL Server にどのように影響するかを知りたいです。

于 2012-06-08T10:31:20.233 に答える
0

SQL Server は内部的に UCS-2 を使用して XML データを格納しますが、これはデータを SQL Server に渡す形式とは関係ありません。

たとえば、varcharリテラルを使用して挿入する場合は、nvarchar代わりにリテラルにし、エンコーディングを UTF-16 として宣言します。サンプル:

DECLARE @VAR XML
INSERT INTO MyTable (MyXmlColumn) 
    VALUES (N'<?xml version="1.0" encoding="UTF-16" ?><doc></doc>')
于 2012-06-08T10:26:31.600 に答える