QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

MS-Access + ODBC での文字コードの指定

MySQL上に UTF-8で格納されたデータを、MS-AccessでODBC経由で呼び出ししたいのですが、Access側(およびODBC側)で文字コードの指定を指定する場所が見当たらず、日本語の文字列を読み込むと文字化けしてしまいます。
何か良い解決法をご存知の方がいらっしゃいましたら教えてください。
<バージョン情報>
MySQL 4.0.24
ODBC MySQL 3.51 Driver
MS-Acsess 2000

質問者:Desmo

回答

MyODBCのInitial Statementに書き込みをするとエラーが出るのは、MySQLのバージョンの問題でした。
MySQLを 4.1.14-nt にすると、このエラーは無くなりました。
しかし相変わらず文字化けは起こります。
(Initial Statement には、"SET NAMES UTF8"と記述しました)
問題はAccess側ではなく、DBC側にあるようです。
試しにJavaからJDBC-ODBCドライバを介して、ODBC(ODBC MySQL 3.51 Driver)接続してみたのですが、やはり同様の文字化けが起きてしまいました。

投稿者:Desmo

編集 履歴 (0)

スッキリとはしないのですが、何とか使えるようになりました。
まず、MyODBCのInitial Statementですが UTF8だとどうしても文字化けしてしまいます。
それでInitial Statement に"SET NAMES SJIS"と記述すると何故だか文字化けが無くなりました。
データ自体は確かに UTF-8で作成されていると思われます。
その根拠は、

  1. phpMyAdminでエクスポートをすると、CREATE TABLEの最後に"ENGINE=InnoDB DEFAULT CHARSET=utf8;"の記述が確認できた。
  2. JavaでMySQLのJDBCドライバ経由で接続する場合に、"characterEncoding=UTF-8"という設定で正しく表示できた。  (但し"characterEncoding=SJIS"でも正しい表示になったのだが・・・)

そのことから「ODBCドライバの問題でUTF8を指定すると文字化けする」と私は解釈しました。
これはMS-Accessからの接続だけでなく、Java標準のJDBC-ODBCドライバを使って、MyODBCで接続した時も同じ現象でした。
使用した MyODBCドライバのバージョンは 3.51.12です。

これMS-Accessからの利用する際の不具合が解決したかというと・・・
もう1つ問題がありました。
MS-Accessで、MyODBCでSJIS指定してテーブルをリンクすると レコードサイズが何故か実際の2/3でMS-Assess側に登録されてしまうのです。
例)MySQL上がvarchar(36)だったら、MS-Access上のフィルドサイズは24 になる
といった具合。
UTF-8は1文字を3Byteで表現するといいますから、その関係なのかもしれません。しかしそれではMS-Access上で正しい表示はできません。
またMS-Accessでは、リンクテーブルについては「後でフィルドサイズを変更する」といったことが出来ません。
そこで、

  1. MyODBCにUTF8を設定する。
  2. MS-Accessでテーブルのリンクを行なう。  (これでフィルドサイズは正しく設定される。但し日本語は化ける)
  3. MyODBCをSJISに変更する。 とすることで、MS-Access上のリンクテーブルは、日本語が正しく表示されるようになりました。

これで無理やり使えるようにはなりましたが・・・ このような設定で他にトラブルが無いか正直言って不安です。
もし本当に正しいやり方をご存知の方がいらっしゃいましたら、是非教えてください。
宜しくお願いします。

投稿者:Desmo

編集 履歴 (0)

あるサイトで、

  1. MyODBCのオプションでRead Options From my.cnfをチェック。 c:\my.cnfというテキストファイルを作成し、[ODBC]グループまたは [client]グループに default-character-set=sjis を指定する方法。
  2. MyODBCのInitial Statementに SET NAMES SJIS または SET CHARACTER SET SJIS を書き込む方法。 というのが紹介されていたので試しましたが、どちらもうまくいきませんでした。 1.の方法は、my.cnfを果たして何処に置いて良いのかわからなったので、 c:\とMySQLのインストールディレクトリの下の CONFディレクトリの両方に置いてみたのですが変化なし。 2.の方法は、 [MySQL][ODBC 3.51 Driver]Unknown character set:'SJIS' というエラーが出るようになってしまいました。 実際に私が使用したいのは SJISではなくUTF-8なので、当然こちらを指定していますが・・・ダメです。

投稿者:Desmo

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。