MySQL で、latin1_swedish_ci を utf8_general_ci に変換する方法

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 に書いてあったのだが、
  1. テーブル内のフィールドの文字コード変換には ALTER TABLE 文を使う。
  2. 直接 utf8 に変換すると文字化けするかもしれないので、一度バイナリ型にする。
  3. バイナリ型から 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
Posted on 2007-06-26 by yas |
Movable Type 3.35 で、データベースの文字コード latin1_swedish_ci を utf8_genera
Trackback from Perl Tips: では、latin1_swedish_ci を utf8_general_ci ......
Posted by Perl Tips (未認証ユーザ) on 2007/06/20(水) 20:59
Movable Type 3.35 を、Drupal 5.1 に移行する。
Trackback from Perl Tips: Druapl は今年に入り 5.1 にバージョンアップし、製品も顔負けのものとなった。そして Movable Type は 4 にバージョンアップ(ベータ......
Posted by Perl Tips (未認証ユーザ) on 2007/07/03(火) 21:49