プロが教える店舗&オフィスのセキュリティ対策術

Hyper-VのゲストOS上に、Windows Server 2008 R2 + MySQL5.1を利用してDBを構築しています。

今回このMySQL環境に、MSSQL2005よりデータを移行したいと思っていますが上手く移行できないデータがありご相談いたします。

■相談点
SQL Server 2005からの移行データにMAC外字の文字コード(0x8540~0x889E)が保存されおり、
そのデータをMySQL Migration Toolkit(Version1.1.17)を利用し移行すると異なる文字コードへ変換されてしまう。
例:0x8646 → 0x8145

■MySQL環境
MySQL5.1の設定、および移行先のテーブル作成構文は下記の様にしています。

[mysql]
default-character-set=cp932

[mysqld]
character-set-server=cp932

テーブルCreateSQL構文
CREATE TABLE `TBL01` (
`ID` int(10) NOT NULL,
`NAME` char(40) COLLATE cp932_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp932 COLLATE=cp932_bin'

■MySQL Migration Toolkitの指定
・MSSQL接続方法
 jdbc:mysql://192.168.1.1:3306/?user=test&password=test&useServerPrepStmts=false&characterEncoding=cp932
・MySQL接続方法
 jdbc:mysql://192.168.1.2:3306/?user=test&password=test&useServerPrepStmts=false&characterEncoding=cp932

対処方法をご存じの方がいらっしゃいましたら、教えて頂けないでしょうか。
よろしくお願いいたします。

A 回答 (1件)

私はMacintosh環境については詳しくないので勘違いがあるかもしれませんのでご注意ください。



JDBC の URL のエンコーディングは、 cp932 ではなく MS932 か、 Windows-31J (Windows 日本語(Microsoft社のShift_JIS))を指定します。
(CP932 は IBM OS/2 日本語(IBM社のShift_JIS)の様です。CP932をもとに MS932 へと拡張された(NEC拡張文字の追加)のではと思います。)
また、Java は Macintosh 日本語(Apple社のShift_JIS(X-MAC-JAPANESE))をサポートしていないようです。
※誤った指定でもそれなりにうまく動作したのは、Windows 日本語環境ではデフォルトがMS932なので、CP932の指定が無視されたのではないかと思います。
http://docs.oracle.com/javase/7/docs/technotes/g …
http://java.sun.com/javase/ja/6/docs/ja/technote …
また、MySQLがサポートするCP932は、Windows-31JですのでApple社のShift_JISはサポートされていない様です。
http://dev.mysql.com/doc/refman/5.1/ja/charset-a …
http://dev.mysql.com/doc/refman/5.1/ja/charset-c …

以上のことからMySQL Migration Toolkitを使用すると文字化けが発生したと考えられます。
よってSQL Server のデータを文字化けを回避できる他のツールで取得して、MySQLの側も文字コードの自動変換を回避するようにするとかになるかと思います。

[mysqld]
character-set-server=cp932
skip-character-set-client-handshake

なお、Apple社のShift_JISについてはこちらに http://ja.wikipedia.org/wiki/MacJapanese
もあるように、Apple社らしい独創性(非互換性)を感じます。Microsoft社とは対照的ですね。
    • good
    • 0
この回答へのお礼

OrangeCup150さん

ご回答へのご連絡が遅れ申し訳ございません。
ご回答いただきました内容、大変勉強になりました。

特にJavaの仕様部分、情報ありがとうございます。
他のツールを検討してみたいと思います。

また、ご指摘のあったCP932の文字コードについて、調べてみました。
MySQLでcp932を指定した場合、Javaエンコード名は「Cp932 or MS932」として動作してくれるようなのでMac外字部分以外は変換できているのだと思いました。
参考URL:http://dev.mysql.com/doc/refman/5.1/ja/connector …

情報ありがとうございました。

お礼日時:2012/07/30 18:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!