MySQL 4.0 と 4.1 では、文字コードの扱いの仕様が変わったらしい。特に 4.0 で日本語を扱っていて、4.1 にアップグレードしたいときには文字化けという非常にややこしい状況が生まれているようだ。
さて、レンタルサーバなどのホスティングプロバイダが勝手に MySQL 4.0 から 4.1 にアップグレードしたりすると、特に海外のレンタルサーバでは日本語のことなんかこれっぽっちも考えてくれてはいないため、私のケースではなぜか文字コードがすべて latin1_swedish_ci となっていた。同じ latin1 の中でも latin1_swedish_ci となるらしいのだ。
ゆえにこれを utf8 に変換したい。1レコードずつ変換するのだろうか?などと恐ろしい考えが一瞬頭をよぎったのだが、調べていくうちに以下の手順を踏めばよいことがわかった。
その答えはズバリ MySQL 4.1 のリファレンスマニュアル
Converting 4.0 Character Columns to 4.1 Format に書いてあったのだが、
- テーブル内のフィールドの文字コード変換には ALTER TABLE 文を使う。
- 直接 utf8 に変換すると文字化けするかもしれないので、一度バイナリ型にする。
- バイナリ型から utf8 に文字コード変換を行う。
ということで、以下のようなものが例となるので、参考にしてみて欲しい。
ALTER TABLE your_table1 MODIFY field1 BINARY(255),
MODIFY field2 BINARY(255),
MODIFY field3 BINARY(65535),
MODIFY field4 BINARY(65535);
ALTER TABLE your_table MODIFY field1 VARCHAR(255) CHARACTER SET utf8,
MODIFY field2 VARCHAR(255) CHARACTER SET utf8,
MODIFY field3 TEXT CHARACTER SET utf8,
MODIFY field4 TEXT CHARACTER SET utf8;
トラックバック URL:
https://perltips.twinkle.cc/trackback/216