MogLog

メモというか日記というか備忘録というか

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 CHANGEfrom‵ ‵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カラムにすっきり移行することができた。
こんな面倒な方法以外ないのかな…。