トップ回答者
xp_logeventの文字化けについて

質問
回答
-
SQL Server では、照合順序とコードページ(文字コード)の間に密接な関係があります。
照合順序が決まると、そこ(カラムや文字データ等)のコードページが自動的に決まります。SQL_Latin1_General_CP1_CI_AS は非 Unicode のため、ストアドプロシージャの引数などで Unicode で受け渡ししたとしても、最終的にはコードページの変換が行われてしまいます。
SQL_Latin1_General_CP1_CI_AS は確か Windows の ANSI (コードページ 1252)になるはずですので、日本語の文字は変換できる文字がなく、文字化けとなります。
※ Unicode 系の照合順序の場合で Unicode 文字データを扱う限りはコードページの変換が無いため、未対応文字でも格納自体は出来たりと、挙動が異なります。SQL_Latin1_General_CP1_CI_AS が必須要件ということであれば各種メッセージは英語やローマ字で記述するのが必須要件ということにもなります。
なお、SQL_Latin1_General_CP1_CI_AS は SQL Server 6.5 までとの互換性の為に残されているだけの非常に古い照合順序ですので、理想論で言えばそこから見直し改修するのが好ましくはありますね。
今の時代で非 Unicode の照合順序を使わないといけない理由はかなり限定されるケースに留まるかと思われます。MCITP(Database Developer/Database Administrator)
- 回答としてマーク 星 睦美 2015年11月10日 8:22
すべての返信
-
aviator__さん
お疲れ様です。ご回答ありがとうございます。Windowsのイベントログも見ました。WindowsのイベントログとSQL Serverログでは同じメッセージが表示されました。すみませんが、私のMicrosoftのアカウントは写真を挿入するのを失敗しましたので、ちょっとわかりづらいかもしれないです。
さらに調べたところ、ポイントはSQL Server の照合順序にありそうです。
今のSQL Serverのインスタンスの照合順序は「SQL_Latin1_General_CP1_CI_AS」、文字化けのログが表示されました。試しのため、「Japanese_CI_AS」を持つ別のインスタンスをインストールしてみると、文字化けがなくなりました。
現在の案件では、「SQL_Latin1_General_CP1_CI_AS」の照合順序は必須のため、「SQL_Latin1_General_CP1_CI_AS」のままの照合順序で文字化けの問題を回避する方法をご存知ですしょうか
- 編集済み Nguyen Dzung Dong 2015年11月4日 1:07
-
-
SQL Server では、照合順序とコードページ(文字コード)の間に密接な関係があります。
照合順序が決まると、そこ(カラムや文字データ等)のコードページが自動的に決まります。SQL_Latin1_General_CP1_CI_AS は非 Unicode のため、ストアドプロシージャの引数などで Unicode で受け渡ししたとしても、最終的にはコードページの変換が行われてしまいます。
SQL_Latin1_General_CP1_CI_AS は確か Windows の ANSI (コードページ 1252)になるはずですので、日本語の文字は変換できる文字がなく、文字化けとなります。
※ Unicode 系の照合順序の場合で Unicode 文字データを扱う限りはコードページの変換が無いため、未対応文字でも格納自体は出来たりと、挙動が異なります。SQL_Latin1_General_CP1_CI_AS が必須要件ということであれば各種メッセージは英語やローマ字で記述するのが必須要件ということにもなります。
なお、SQL_Latin1_General_CP1_CI_AS は SQL Server 6.5 までとの互換性の為に残されているだけの非常に古い照合順序ですので、理想論で言えばそこから見直し改修するのが好ましくはありますね。
今の時代で非 Unicode の照合順序を使わないといけない理由はかなり限定されるケースに留まるかと思われます。MCITP(Database Developer/Database Administrator)
- 回答としてマーク 星 睦美 2015年11月10日 8:22