utf8_unicode_ci から utf8_general_ci に一括ALTERする

だいぶ前ですが、Rails の config/database.yml で collation を指定し忘れて、全てのテーブルが utf8_unicode_ci になってしまいアタマを抱えるという事件がありました。

なぜこれで困るのかについては、

qiita.com

が詳しいです。

対処としては愚直に ALTER TABLE をするしかないですが、そのbashコマンドをメモっておきます。 (tmp/tablesには テーブル名がリストされてます)

for t in `cat tmp/tables`; do echo "ALTER TABLE $t CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"; done > tmp/alter_table.sql

for t in `cat tmp/tables`; do mysql -uroot test -e "SHOW CREATE TABLE $t \G" | grep "COLLATE utf8_unicode_ci" | sed -e 's/utf8_unicode_ci/utf8_general_ci/g' | sed -e 's/,$/;/g' | sed -e "s/^/ALTER TABLE $t MODIFY COLUMN/g" ; done > tmp/alter_table_column.sql