Ruby で MySQL への INSERT
原因の根幹はRuby
限定ではないでしょうが、Ruby
の書き方に起因するものとしてこのようなタイトルにしました。要はMySQL
にINSERT
できないというただそれだけのハマりです。2017年にこんなレガシーな方法で、とは思いますが、一つの事例として。
エラーメッセージ
こういうのです。
(省略):in `_query': 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 'Registered,1,1,1,2,3)' at line 1 (Mysql2::Error)
結論
VARCHAR
型はクォートする*1。
実例
INSERT 文での VALUE の値を最初は以下のように書いていました。
(#{row[0]},#{row[1]},#{row[2]},#{row[3]})
ところが、2カラム目 と 3カラム目 はVARCHAR
型でした。したがって以下のようにすると通りました。
(#{row[0]},"#{row[1]}","#{row[2]}",#{row[3]})
なお、ダブルクォートをそのまま埋め込むので、SQL
を変数に入れる場合は%Q
などを使う必要があります。
どうやって解決したか
実直に生成された SQL を MySQL のコマンドラインから打ち込んだら分かりました。今日も見事にドハマりです。
*1:ちなみに DATE や DATETIME はエラーこそ出ませんが NULL が飛んで行くのでやはりクォートする