mysql のダンプファイルが ujis だったので utf8 に調教しなおす
オラァン!!
CentOS4 のサーバから CentOS6 のサーバに移行したら、一緒にアプリケーションも移行しないとダメダルルォ?と言われて、そんな話聞いてないんじゃ!とエンジニアがお怒りになったので。
移行前の環境は SSH が使えなくて MySQL へのアクセスは PHPmyAdmin のみ。とりあえず何も考えず SQL →エクスポートで、エンコード等は何も指定せず「詳細」から目的のデータベースだけ指定して取得。ローカルのエディタなり ( vim とか ) で展開して文字化けしてなければ、作業に使えるでしょう。ということで作業してみましょ。
とりあえずそのままサーバに戻してみる。
[user@localhost]$ mysql -u USER -pPASSWORD tesutonodatabase < ./ikousurudatabase.sql [user@localhost]$ mysql -u USER -pPASSWORD tesutonodatabase mysql> show create table TABLENAME\G; 以下略 ) ENGINE=MyISAM AUTO_INCREMENT=1145141919810 DEFAULT CHARSET=ujis 1 row in set (0.00 sec) mysql> show table status; *************************** 1. row *************************** 以下略 Engine: MyISAM 以下略 Collation: ujis_japanese_ci 以下略
( 当然 ) だめじゃねーか!よく見たら取得してきたダンプファイルの中に おもいっきり ujis と MyISAM って書いてあるよ!InnoDB で運用する予定なので ENGINE も一緒に変更しましょ。( MyISAM から InnoDB に変更した時、 auto increment が正常な動作しない可能性もあるらしいけど今回は考慮外としました、ヘーキヘーキ! )
mysql> show engines; +------------+---------+------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +------------+---------+------------------------------------------------------------+--------------+------+------------+ | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | +------------+---------+------------------------------------------------------------+--------------+------+------------+ 5 rows in set (0.00 sec)
my.cnf にデフォルトエンジンを InnoDB と指定してエラー吐かなかったので当然このように使える状態です。それでは、文字コード ( charset ) と照合順序 ( colletion ) とエンジン ( engine ) を変更しましょう。
mysql> ALTER TABLE tablename CHARSET=utf8; mysql> ALTER TABLE tablename COLLATE utf8_general_ci; mysql> ALTER TABLE tablename ENGINE = InnoDB;
変更しました、どうかなっ!確かめてみましょう!
[user@localhost]$ mysqldump -u USER -pPASSWORD tesutonodatabase > ./tesutono.sql [user@localhost]$ less tesutono.sql 以下略 CREATE TABLE `tablename` ( `id` int(11) NOT NULL AUTO_INCREMENT, `infofofofo` varchar(255) CHARACTER SET ujis DEFAULT NULL, 以下略 ) ENGINE=InnoDB AUTO_INCREMENT=1145141919810 DEFAULT CHARSET=utf8;
だめじゃねーか!なんだこのめちゃくちゃな構成 !ナンデ! ALTER TABLES tablename CHARSET=utf8; で一緒に変わらないのかよぉ!
調べた
mysql> ALTER TABLE tablename CONVERT TO CHARACTER SET utf8;
どうやらこうしないとだめらしい、くっそー。とりあえずこれで無事に全ての文字コードが utf8 仕様になりました。やったぜ。
というかこいつは指定すれば一緒に照合順序も変更できるらしい。
mysql> ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
(´・ω・`) そんなー。