Mysqlでこれまでmy.cnfに文字コードを指定せずにlatin1でシステム運用してしまっていて、途中から文字コードを指定したデータを持つ新システムを追加したい場合

スポンサーリンク
MySQL
スポンサーリンク

昔よくやらかしてしまったのが、my.cnfにdefault-character-setやcharacter-set-serverを設定せずにシステムを構築・運用してしまうというミス。
結果として「データベース定義はutf8なのに中に入っているデータはlatin1で入ってる」ようなデータベースが出来てしまい、その事を作った本人や移行担当の人が把握してなくて、後からデータのダンプやインポートの際に苦労してしまったりします。

さらに面倒なのが、そのサーバに後からきちんと「utf8データベースにutf8のデータを入れている」システムのデータを移行して共存させたい場合。
my.cnfに文字エンコードutf8を指定すると、latin1のデータが入っている既存システムが全て文字化けし、my.cnfに何も変更をしないと新システムのほうがバグります。
原因がわからないと地味に混乱します。

この場合は、my.cnfの設定はいじらずに、DB接続クラス側でエンコーディングを指定してやります。
そして、この場合だと新システム側のDB接続部分の処理で接続文字列を指定します。たとえばPHPだとPDOの接続文字列を「mysql:host=○○;dbname=○○;port=3306;charset=utf8」というように変更します。

1 Star2 Stars3 Stars4 Stars5 Stars (まだ投票されていません)
読み込み中...

コメント

タイトルとURLをコピーしました