データベース操作におけるエンコード

解決


MIN  2008-03-07 17:19:57  No: 100416  IP: 192.*.*.*

データベース操作を行っております。

あるテーブルフィールドのキャラクタセットが「latin1」となっており、値は「花」としてあります。

SELECT * FROM table WHERE field LIKE '%花%'

とすると下記のエラーが発生します。

[MySQL][ODBC 5.1 Driver][mysqld-5.0.22]Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'

そこで、直接、データベースのフィールドのキャラクタセットを「sjis」に変更したところレコードを照会することができました。

エンコードの問題だと思い、

CONNECTION.Execute "SET NAMES SJIS"
※CONNECTIONはADODBのCONNECTIONオブジェクト

を実行したところ、

[MySQL][ODBC 5.1 Driver][mysqld-5.0.22]SET NAMES not allowed by driver

とのエラーが発生します。利用しているODBCドライバでは「SET NAMES」を利用できないようです。

この場合、どのように対処したらいいのでしょうか?

<環境>
Windows XP Pro / Visual Basic 6.0 SP6

編集 削除
MIN  2008-03-10 12:12:30  No: 100417  IP: 192.*.*.*

質問を変えてみます。

現在ODBCから操作しているデータベースのキャラクタセットのデフォルト値が「latin1」となっています。

テーブルのフィールドの値が「花」だったとします。
下記のようにVBから値を取得する場合、エラーが発生します。

      SELECT * FROM table WHERE field LIKE '%花%'
      [MySQL][ODBC 5.1 Driver][mysqld-5.0.22]Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'

この場合はどうすれば値を取得することができるのでしょうか?

編集 削除
やじゅ  2008-03-10 14:55:45  No: 100418  IP: 192.*.*.*

ODBC設定で「SET NAMES SJIS」を設定すればいいのかな?
http://tsuttayo.sytes.net/mysql/install/odbc/odbc41_3.gif
サーバ側のキャラクタセットの方法
http://tsuttayo.sytes.net/bbs/read.php?FID=2&TID=588&p=1

編集 削除
MIN  2008-03-11 11:04:57  No: 100419  IP: 192.*.*.*

やじゅさん、ありがとうございます。

インストールしているODBCドライバのバージョンが5.1だったため、

      CONNECTION.Execute "SET NAMES SJIS"
      ※CONNECTIONはADODBのCONNECTIONオブジェクト

を実行しても、

      [MySQL][ODBC 5.1 Driver][mysqld-5.0.22]SET NAMES not allowed by driver

と返されていました。

3.51バージョンをインストールして「Connect Options」タブの「Character Set」にデータベースのキャラクタセットである「latin1」を設定したところ、取得・更新ともに成功しました。

上位バージョンである5.1には上記の設定がなく、下位バージョンの3.51には存在するのはなぜなのでしょうか?いまひとつ腑に落ちません。

編集 削除
もげ  2008-03-18 10:24:53  No: 100420  IP: 192.*.*.*

>上位バージョンである5.1には上記の設定がなく、下位バージョンの3.51には存在するのはなぜなのでしょうか?


http://www.s-style.co.jp/mysql_news/mysql_news2007/2007121301.html

>* Disallow 'SET NAMES' in initial statement and in executed statements.

のような記述があり、

http://blog.ohgaki.net/set_namesa_mcb_asc
http://goungoun.dip.jp/app/fswiki/wiki.cgi/devnotebook?page=MySQL%A1%A2%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%B8%C0%B8%EC%A4%AB%A4%E9+SET+NAMES+%A4%CF%A5%BB%A5%AD%A5%E5%A5%EA%A5%C6%A5%A3%A4%CB%CC%E4%C2%EA%A4%A2%A4%EA

のような議論もあるようなので、どうやらセキュリティ強化の結果と推測します。

解決策はMySQLのコミュニティに移動してご相談されるほうがよいかと。

編集 削除
MIN  2008-03-18 10:33:54  No: 100421  IP: 192.*.*.*

ちょうど同じページを見ていましたw

SET NAMES が禁止されたようですね。現在はバージョンを3.51に落として利用しています。

次バージョンに期待します。ありがとうございます。

編集 削除