2011.4.22
MySQLでよく文字コード絡みで悩まされるので、SQL使用時にコードを設定する方法がないものかと探していましたが、これはよさげというものを本で見付けましたので、メモしておきます。
例えば、CakePHPで認証コンポーネントを使うために、以下のようなテーブルを作るとします。
CREATE TABLE `Mydata` . `users`(
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50),
`password` VARCHAR(50),
`created` DATETIME DEFAULT NULL ,
`modified` DATETIME DEFAULT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
重要なのは、最後行にあるこのコードです。DBの種類と文字コードを指定しています。今時utf8以外を使うことはめったにないので、個人的にはコピペで十分かなぁと思っています。
ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
MySQLの環境によっては、使用するMySQLのストレージエンジンのデフォルト設定がInnoDBになっている場合があるそうです。(とりあえず、MAMP1.9.6.1(PHP5.2.17を選択)の状態では、InnoDBになっていました。)うまくいかない場合は、最後の行を以下のように変更してみてください。
ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;