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

h3pei
フリーランスのソフトウェアエンジニア。Ruby / Rails アプリケーションの開発が得意領域。設計・実装・運用まで含めてプロダクト開発が好きです。
MENTAでアプリケーション開発や学習の支援・伴走もしています。