エクセルでODBCを使い、MySQLを操作しようとしています。
結論から言うと、文字化けします。
環境:
Windows XP, MySQL 4.1.18,Excel 2003,ODBC 3.51
C:\WINDOWS\my.ini
には、
[mysqld]
default-character-set=ujis
[mysql]
default-character-set=ujis
[mysql-dump]
default-character-set=ujis
C:\Program Files\MySQL\MySQL Server 4.1\my.iniには
[mysql]
default-character-set=ujis
[mysqld]
default-character-set=ujis
MySQL Command Line Clientから
"SHOW VARIABLES LIKE '%char%'"
と入力すると
character-set_client : ujis
character-set_connection : ujis
character-set_database : ujis
character-set_results : ujis
character-set_server : ujis
character-set_system : utf8
という状態です。
このままではいけないだろうとは分かっていますが、my.iniなどをいろいろ変更してみても上手くいかず、とりあえず、変更前の状態にいったん戻しています。
現状では「日本語」という文字列をINSERTしたつもりが、「日?{語」となってしまいます。
この問題に対して、
①MySQLの設定を変える
②設定を変えずにエクセル側で対処する
③設定を変えず、MySQLのテーブル作成時などに個別にcharsetを指定する
教えていただきたいと思います。
②や③がベターです。
よろしくお願いします。
どのようにMySQLへの接続を行い、どのような処理をなさっているのかよく分からないので外しているかもしれませんが、基本に立ち返ってMyODBCの中で「SET NAMES SJIS」を行っているか、確認してみてください。
(クライアントでの文字コードをSJISに設定します。)
たいていはこれで上手く行くはずですが、それでも問題ある場合、DATABASEを作成する際に文字コードをSJISと設定しておけば文字コード変換の必要がなくなり、問題は発生しなくなると思います。
(1つのDATABASE内でTABLEごとに文字コードを変えることも可能だったはずですが、混乱のもとになりますので、避けた方が良いと思います。)
[参考URL]
回答ありがとうございます。
>どのようにMySQLへの接続を行い、どのような処理をなさっているのかよく分からないので
この部分、大切な情報でした。
VBAを記述して
Function P_CnString() As String
P_CnString = "DRIVER={mysql odbc 3.51 driver};" & "SERVER=localhost;" & " DATABASE=MyDB;" & "UID=MyID; Password=MyPass;"
End Function
というようにして接続をしています。
回答していただいたAll Aboutの記事のように、コンパネからデータソース(ODBC)選んで、「SET NAMES SJIS」の設定をして、Excelの"データ"->"外部データの取り込み"->"新しいデータベースクエリ"で、接続をして見ました。接続はできるのですが、やはり文字化けをしてしまいます。
CREATE DATABASEのときに、DEFAULT CHARACTER SET SJISとしてokが帰ってきていますが、やはり文字化けします。
以前はphpを使ってMySQLに接続していて、文字化け関係はそこそこ解決してきているのですが、今回のVBA,ODBC周りはよく分かりません。。。。