mysqlの予約語に気をつけた方がいい
やられました...orz
直接sqlをいじることがなかったのですが、いじった時に気付きました。
mysql> show tables; +-----------------------------------+ | Tables_in_foo | +-----------------------------------+ | categories | | comments | | rankings | | reads | | schema_migrations | | supplementals | | taggings | | tags | | users | +-----------------------------------+
こんな感じで表示されています。
ここでreads
テーブルのデータを取得しようとします。
mysql> select * from reads; 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 'reads' at line 1
なぜ、syntaxエラーになる???
おかしいだろ!ってなりました。
テーブルはきちんと作成されているのか?
reads.frm reads.ibd
二つともきちんとある。
rails側では値が取得できている。
[1] pry(main)> Read.count (0.3ms) SELECT COUNT(*) FROM `reads` => 0
わからん・・・。
試しにデータを投入しても、無事に投入できる。
ここで予約語っていう概念か?と思い調べました。
そうしたらREAD/READS
が見つかりました。
ああ、そういうことかーってなりました。
予約語を使用する場合はバッククォート
でエスケープすればいいです。
今思うと、上のrailsのsqlはきちんとバッククォート
でエスケープしています。
今まで気にしなかったですが、予約語対策をしていたんですね。