MySQL へ格納できない
Twitter のツイートを MySQL に記録しようとした際に Ruby で mysql2 を用いようとしたのですが、どうあがいてもエラーで止まることがあります。Incorrect string value
とか出てきますが、MySQL に収める前の生取得データはちゃんと取れています。
したがって、MySQL へ格納する過程でエラーが出ていることになります。
mysql2 での文字コードの設定
となるとまあ十中八九は文字コードの問題でしょう。ここでは cnf ファイルの設定はutf8mb4_general_ci
になっているものとして話を進めます。cnf ファイルの設定についてはこちらのサイトやこちらのサイトをご参照ください。また、テーブル、カラムの文字コード設定も utf8mb4_general_ci に設定されているものとします。
さて、mysql2 で文字コードを utf8mb4_general_ci に指定するためには、オブジェクトの作成時に以下のオプションを指定してあげましょう。
:charset => 'utf8mb4' :encoding => 'utf8mb4' :collation => 'utf8mb4_general_ci'
具体的には以下のような感じで生成してあげればいいです。
client = Mysql2::Client.new(:host => 'HOSTNAME', :user => 'USERNAME', :password => 'PASSWORD', :database => 'DATABASE', :charset => 'utf8mb4', :encoding => 'utf8mb4', :collation => 'utf8mb4_general_ci')
MySQL にデータを投入
これで INSERT すれば通るはずです。queryメソッドで発行するクエリ文字列は、SQL エラーが起きないように % や %Q でくくるのが良いかと思います。変数を用いる場合はダブルクォーテーションとシングルクォーテーションの違いに注意ですね。