2012-09-30

MySQLのカラム名を「from」にしてしまってちょっと困った件

MySQLのカラム名を「from」にして作成してしまった(Railsのマイグレーション経由で作成した)。

Eメールの送り主という意味で、fromというカラム名にしたのだけれど、これはMySQLの予約語に相当するため、データを扱う上で色々と不具合が生じた。

※MySQLの予約語一覧 http://dev.mysql.com/doc/refman/4.1/ja/reserved-words.html

そこで、カラム名を「sender」に変更しようと思い、以下のSQLを実行した。

ALTER TABLE mails CHANGE from sender varchar(60);

しかし…

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from sender varchar(60)' at line 1

シンタックスエラー…。
じゃあバッククオート「‵」でカラム名を囲ってみてはどうだろうかと思い再挑戦

ALTER TABLE mails CHANGE ‵from‵ ‵sender‵ varchar(60);

しかし…!

ERROR 1054 (42S22): Unknown column '‵from‵' in 'mails'

そんなカラム無いってさ…。
シングルコーテーションとかダブルコーテーションで囲ってみてもダメだった。

しかたがないので、一度新しいカラムを作成し、そこにデータを移行することにした。

-- 1. senderカラムを追加する
ALTER TABLE mails ADD sender varchar(60);

-- 2. fromカラムのデータをそのままsenderに移行する
UPDATE mails set `sender` = `from`;

-- 3. fromカラムを削除する
ALTER TABLE mails DROP `from`;

これでfromカラムのデータをsenderカラムにすっきり移行することができた。こんな面倒な方法以外ないのかな…。