QA@IT
«回答へ戻る

回答を投稿

スッキリとはしないのですが、何とか使えるようになりました。
まず、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

スッキリとはしないのですが、何とか使えるようになりました。
まず、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