mysql2 の gem を使って MySQL に接続する際に文字コードを utf8mb4_general_ci にする方法

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 でくくるのが良いかと思います。変数を用いる場合はダブルクォーテーションとシングルクォーテーションの違いに注意ですね。

Powered by はてなブログ