MySQL4.1、MySQL5文字化けしないコツ

まぁちょっと古いネタなので新鮮味はないけど、たまに忘れて調べなおしたりしているのでメモ。
MySQL4.1以降、エンココーディングに関する部分が大幅に変わったので気をつける必要があります。
ただ、気をつけるポイントさえしっておけば、エンコーディング周りでも以前より便利になっているはず。

DB作成時

DB作成時にDBのエンコードを指定します

CREATE DATABASE database_name CHARACTER SET utf8;

上記のように最後にCHARACTER SET指定することでDB毎にエンコードを設定します。

接続時

DB接続時には、接続する側の内部エンコーディングをDBに対して初めに通知する必要があります

SET NAMES sjis;

こうすることでDBの入出力の際に、自動的に接続側のエンコードと変換して処理してくれます。
DBのエンコードと接続する側のエンコードが同じでもこれは必ず発行するようにします。

アプリケーションを利用する場合などで、ODBC接続を使う場合にはINITIAL STATEMENTで接続時に発行するSQLを設定できるのでそういったものも利用できます。

SQL文を書く際は好みでCommon SQL Environmentというソフトを使っているのですが、現在ODBCでの接続しかできなく内部はsjisで固定になっていますが上記の方法でDBのエンコードを気にせずに利用することができます。

SQL文の流し込み

SQLをファイルから流し込む際にはファイルの書かれているエンコードを指定します
基本的に流し込む先のDBと同じでしょう。ただこれを指定してあげないと見事に化けたりします。

mysql -u user_name -p --default-character-set=utf8 database_name < scheme.sql