データベース操作を行っております。
あるテーブルフィールドのキャラクタセットが「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
質問を変えてみます。
現在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'
この場合はどうすれば値を取得することができるのでしょうか?
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
やじゅさん、ありがとうございます。
インストールしている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には存在するのはなぜなのでしょうか?いまひとつ腑に落ちません。
>上位バージョンである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のコミュニティに移動してご相談されるほうがよいかと。
ちょうど同じページを見ていましたw
SET NAMES が禁止されたようですね。現在はバージョンを3.51に落として利用しています。
次バージョンに期待します。ありがとうございます。