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

MySQL4.1での文字化け

はじめまして。
現在、VB.NetからMySQL4.1にODBCを使って接続しています。
しかし、いわゆるダメ文字と言われる「能」や「表」など
特定文字のみ文字化けしてしまいます。
接続文字列等をいろいろ工夫してみたのですが
どうしてもうまくいきません。
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" + _
"SERVER=...;" + _
"DATABASE=****;" + _
"UID=
;" + _
"PASSWORD=
***;" + _
"useUnicode=true & characterEncoding=EUC_SJIS;"+ _
"OPTION=16834"
サブクエリを使用したいのでどうしてもMySQL4.1以降を使用したいのですが
どなたかよい方法を教えていただけないでしょうか。

質問者:ゆず

回答

お疲れ様です。

一点ほどですが、
characterEncodingの設定が「EUC_JP」じゃないからとか・・・。
間違っていたらすみません。

投稿者:env

編集 履歴 (0)

すみません。書き間違えてました。

ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" + _
"SERVER=...;" + _
"DATABASE=****;" + _
"UID=
;" + _
"PASSWORD=
***;" + _
"SET CHARACTER SET SJIS;"+ _   <----ここ
"OPTION=16834"

でした。
で、特定文字だけ文字化けしてしまいます・・・。

投稿者:ゆず

編集 履歴 (0)

その文字化けはデータベースに格納するときに発生しているのでしょうか?それとも読み出すときの話ですか?MySQLの付属ツールを使えば確認できますよね。

ゆずさんの書き込み (2005-10-13 11:14) より:

はじめまして。

しかし、いわゆるダメ文字と言われる「能」や「表」など

特定文字のみ文字化けしてしまいます。

この手の文字が化ける原理はご承知でしょうか?

C言語では'\'文字を特殊コードを示すエスケープ文字として使われています。そのため、コンパイル時に'\'コードを含む2バイト文字は、文字の片方がエスケープコードとして認識されて処理が行われます。そして最終的に2バイト文字のうち'\'が無視(削除)されて文字化けが発生します。ただし、これはあくまでコンパイル時の話で、入出力文字列に関してこのような事は発生しません。

VB.NETやSQLは'\'をエスケープコードとしないので、VB.NETが原因でこの手の文字化けが発生することは考えにくいのです。またC言語にしてもコンパイル時に発生する話なので、ODBCドライバ等の不具合とも考えにくいのです。

投稿者:甕星

編集 履歴 (0)

データベースにInsert文で格納して
Select文で確認した時点で以下のように化けています。
たとえば[user_master]というテーブルに

user_group=表参道
user_name=能力

としてInsert文で格納した場合、

mysql> select * from user_master;
+------------+-----------+
| User_Group | User_Name |
+------------+-----------+
| 侮Q道 | 迫ヘ |
+------------+-----------+
1 row in set (0.00 sec)

となって化けてしまっています。
このテーブルの内容をVBのフォーム上で表示しても
もちろん化けています。
これらのダメ文字以外は化けないのですが・・・。

投稿者:ゆず

編集 履歴 (0)

MySQLの文字コードって、何を設定しますか?
my.cnfファイルの設定でSJISを設定してますでしょうか?

mysql> status

で調べてみて、文字コードがVB.NETと合ってなければ合わせる
必要があると思います。
設定に関しては、Googleなどで調べるとたくさんでます。

投稿者:env

編集 履歴 (0)

my.iniにて、こうなってますか?

[mysqld]
default-character-set=sjis
[mysql]
default-character-set=sjis
[mysqldump]
default-character-set=sjis

なってなければ書き加えればOKだと思います。

投稿者:未記入

編集 履歴 (0)

すみません。
my.iniの中の文字コードがsjisになっていませんでした。
そこで直そうとしたのですが
my.iniの中に

[mysql]
default-character-set=sjis
[mysqldump]
default-character-set=sjis

がみつからないのですがどこにあるのでしょうか。
それとも直接INIファイルの中を書き換えてはいけないものなのでしょうか。

投稿者:ゆず

編集 履歴 (0)

再びすみません。my.iniの中に追加ですね。
しかし、追加しましたが相変わらず文字化けしています。
mysql> status
で調べたところ

Server characterset: sjis
Db characterset: sjis
Client characterset: latin1
Conn. characterset: latin1

となります。やはり設定がどこかおかしいのでしょうか。

投稿者:ゆず

編集 履歴 (0)

MySQLを再起動しました?

投稿者:未記入

編集 履歴 (0)

再起動しました。

先ほどVBのプログラム上でデータベースをOPENするたびに
SET NAMES SJIS
のSQLを発行したところ文字化けは解消されました。
お騒がせしました。
どうもありがとうございました。

投稿者:ゆず

編集 履歴 (0)
ウォッチ

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