MySQLに路線テーブルを作成したら怒られた

結論から言うと、MySQLの予約語と被っていたという単純な問題だったのですが、意外と悩んでしまったので書いときます。

駅ろけとかいろいろ作ってる関係で、いろいろ駅データを扱うことが多いのですが、今回はSQLiteからMySQLにデータを移そうとしたときのお話。

SQLiteにlinesという路線の情報が記録されているテーブルがあって、これと同じテーブルをMySQL上で

CREATE TABLE lines (id INTEGER NOT NULL);

という感じに作成しようとしたらエラー。

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 'lines (id INTEGER NOT NULL)' at line 1

え、なにMySQL反抗期?そういう時期なの?てかlinesの何が悪いの?最近路線制覇してないからか???新駅集めてないからなのか!?!?!?!と恐慌状態に陥りつつも冷静になってMySQLの予約語を調べてみる。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.3 予約語
https://dev.mysql.com/doc/refman/5.6/ja/reserved-words.html

…ありました。つーか予約語多い。MySQL反抗期じゃなかった。よかったよ。

というわけでテーブル名をバッククォートでエスケープすればいけます。

CREATE TABLE `lines` (id INTEGER NOT NULL);

でもそもそもテーブル名に予約語を使うこと自体あまりよろしくないと思うのでおとなしくテーブル名を変えときましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

twenty − 14 =