Illegal mix of collationsエラーが出ないようにする
MySQLにSELECT文を発行したら、以下のようなエラーが出て失敗した。
Illegal mix of collations (ujis_japanese_ci,IMPLICIT) and
(latin1_swedish_ci,COERCIBLE) for operation '='
ujisのテーブルにlatin1で検索条件指定しても駄目だよ、というエラーのようだ。実際にはSQLはEUCで書いているのだが、MySQLは設定によってこちらの文字コードをlatin1だと信じ込んでいるらしい。my.cnfかmysqldの起動パラメータで設定変更してやるか、テーブルに接続後に毎回SQLで設定を変更してやる必要がある。今回は最終的にレンタルサーバーで稼動させるつもりなので、毎回SQLで設定してやる方法を取る。
"SET NAMES ujis"
というSQLを発行してやれば、その接続では以後こちらのリクエストをEUCだと判断してくれるようになる。これを接続後毎回実行させるために、Ethna_DB_ADOdbを継承したクラスを作ってconnectメソッドをオーバーライドした。
<?php require_once('Ethna/class/DB/Ethna_DB_ADOdb.php'); class PROJECTID_DB_ADOdb extends Ethna_DB_ADOdb { /** * オーバーライド * 通常の接続処理の後、MySQLの文字コードを設定するSQLを発行する * */ function connect() { if (!parent::connect()) { return false; } return $this->query('SET NAMES ujis'); } } ?>
そして、こちらのクラスをDBクラスとして使うようにControllerに設定。
136行目付近で
- 'db' => 'Ethna_DB_ADOdb',
- 'db' => 'PROJECTID_DB_ADOdb',