RDSのSQL Server 2008で日本語のデータを登録する方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

最近はAWSの環境構築周りで奮闘中のうえじゅんですw
先日、RDS上のSQL Serverに他のDBからデータをインポートする際に日本語が文字化けてしまう問題が発生しました。
苦労しながら解決したので、ブログに残したいと思います。

RDSにSQL Serverのセットアップ

まずは、RDSにSQL Serverのセットアップ方法から簡単に書きたいと思います。

  1. Lunch DB Instance を選択し、Microsoft SQL Server Express Edition を指定します。
    (4種類ありますが、任意のものを選んでください)
    RDS_Management_Console_1
  2. DB Engine Version は SQL Server 2008 を指定します。
    普段は意識する必要はありませんが、SQL Server は後からIOPSを指定することができません。
    Snapshots からの復元でも指定出来ませんでした。
    そのため、増やす必要がある場合は必ず最初に指定してください。
    RDS_Management_Console
  3. あとは特に指定すべきものは無いので、そのまま完了まで進めます。
    起動まではかなりの時間がかかるので、放置しておきましょうw

SQL Serverの検証

RDSにセットアップが完了したので、日本語を利用できるかの検証を行いたいと思います。

さっそくテーブルを作成します。

こちらは日本語で文字化けが発生するテーブルを作成しています。

Windows_7_x64_10

Windows_7_x64_9

次に文字化けが発生しないテーブルを作成します。

Windows_7_x64_8

Windows_7_x64_7

ポイントはオプションで Japanese_XJIS_100_BIN を指定することです。
RDSではデフォルトでは参照順序が SQL_Latin1_General_CP1_CI_AS となっているので日本語に対応していないのです。
参照順序については、以下のURLを参照してください。
http://msdn.microsoft.com/ja-jp/library/ms143515(v=sql.105).aspx

これで2つのデータベースを作成しました。
以下のような感じになるかと思います。

Windows_7_x64_6

 では、各データベースにテーブルを作成します。

Windows_7_x64_5

両方に同じ内容を追加すると以下のようになるかと思います。

Windows_7_x64_4

作成したテーブルにデータを追加します。

テスト文字化け

Windows_7_x64_3

テスト日本語OK

Windows_7_x64_2

では、データを確認してみましょう。

参照順序をデフォルトのままにしたデータベースでは結果が「???」と文字化けしてしまっています。

Windows_7_x64_1

参照順序を指定したものはこのようにちゃんと日本語が表示されていますね。

Windows_7_x64

知っていれば全く問題ありませんが、知らないと痛い目に合うのでそう言えば何か設定があったなと覚えておきましょう。

まとめ

なぜこのようなことが起こってしまうかといいますと、以下のような仕様があるようです。

SQL Server 2008 照合順序の設定は、インストールの種類によって異なります。通常は、組織で共通に使用されている Windows システム ロケールをサポートする SQL Server 照合順序を選択します。

http://msdn.microsoft.com/ja-jp/library/ms144260(v=sql.105).aspx

RDSでは、インストールされているWindowsのシステム ロケールを指定及び変更ができないため、デフォルトが英語圏になってしまいます。
また、権限も管理者権限を持っていないため、後から変更もできません。
便利な機能の「データベースの復元」機能も使えないため、データのエクスポート、インポートを利用する形となります。

RDSのSQL Serverは制限事項もあり、EC2で自分で環境構築するよりは不便な点はありますが、
Snapshotsを取って簡単に復元をすることができたり、1日単位で自動バックアップされたりRDSとしての便利さはあります。

既存のオンプレミス環境がWindows系を利用しているとしても、
AWS上に同様の環境を用意できますし、AWSならではの便利機能も使えますので移行を検討されている方も安心してください。