SQL の1064エラーは予約語を使っている可能性がある

自分は普段、ORM に頼りっぱなしで全く SQL を書かないので、完全に素人の戯言だと思って読んでほしい。

Go の ORM として GORM を使っているのだが、こういうクエリを書こうとするとエラーになってしまった。

db.Where("column = ? AND date = ?", column, date).Delete(&Check{})

カレンダーにやることリスト的なものがあって、それらに対してチェックマークをつけたり外したりできるというような機能の実装である。

エラーメッセージは

Error 1064: 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 'column = ?))' at line 1 

で、エラーコードは1064。軽く調べてみても「クエリの書き方を間違っていないか調べるべし」という当たり前の情報しか出てこない。

もっと調べてみると、「予約語を使っているかもしれない」という情報が出てきた。確かに column は予約語だった……なぜ気づかなかった!

db.Where("`column` = ? AND date = ?", column, date).Delete(&Check{})

このように書くとエラーが解消された。

気づいてしまえば当然だったが、ORM を使っているのに1064エラーが起きるというのは妙で、ちょっと苦戦したので、メモとして残しておく。