DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ODBCでMySQLを使う時の文字化けについて

  • 題名: ODBCでMySQLを使う時の文字化けについて
  • 著者: ラヂオ
  • 日時: 2008/11/17 15:55:54
  • ID: 23387
  • この記事の返信元:
    • (なし)
  • この記事への返信:
    • (なし)
  • ツリーを表示
環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 3.5]
分類:[.NET]

【解決したい問題】

VB .NETからODBCを使いMySQLを使いたいのですが、文字列型のデータ格納・取得がうまくいかず困っています。

 接続に問題はありませんでした。

 整数int型や日付date型は正常に格納・取得出来ますが、文字列の格納・取得が上手くいきません。

 VB .NETからSQLを発行した時、データベースとVB間の文字コードが合わないようです。

 具体的には、下記のようなテーブルがあった時、
  mysql> select * from keyword_search where keyword like '声';
  +-----+--------------+-------+---------+
  | id | modification | count | keyword |
  +-----+--------------+-------+---------+
  | 389 | 2008-11-17 | 1234 | 声 |
  +-----+--------------+-------+---------+

 同じSQLをVB .NETから発行した場合に、レコードが取得出来ません。

 また、INSERT文でレコードを挿入する場合、文字化けしてしまいます。

 プログラムでエラーは出ず、正常終了します。

 お力添えをお願い致します。

・環境

 VB.NETのプログラム側:
  OS:Windows XP Professional Edition
  Visual Basic 2008 Express Edition

 データベース側
  OS:Fedora 9
  MySQL:
   サーバーversion:5.0.51a Source distribution
   プロトコルversion:10
   
   mysql>SHOW VARIABLES LIKE 'character\_set\_%';の実行結果
   +--------------------------+--------+
   | Variable_name | Value |
   +--------------------------+--------+
   | character_set_client | utf8 |
   | character_set_connection | utf8 |
   | character_set_database | utf8 |
   | character_set_filesystem | binary |
   | character_set_results | utf8 |
   | character_set_server | utf8 |
   | character_set_system | utf8 |
   +--------------------------+--------+

【解決するために何をしたか】

1.ODBCのConnectionStringにSTMTを追加してみました。

・STMT=SET CHARACTER SET utf8;を追加した場合

 INSERT文を発行したらテーブル上のレコードが追加されます。追加された文字列のフィールドは空欄になります。

・STMT=SET CHARACTER SET ujis; または
 STMT=SET CHARACTER SET sjis;を追加した場合

 INSERT文を発行したらテーブル上のレコードが追加されます。追加された文字列のフィールドは文字化けした文字列が格納されます。


2.MySQLに、skip-character-set-client-handshakeの設定を追加しました。

 INSERT文を発行した時、STMTでどの文字コードを選択しても追加したレコードに空の文字列が格納されるようになりました。

DOBON.NET | プログラミング道 | プログラミング掲示板