MySQL に CSV ファイルをインポートするときの改行コードは LF でないといけない

完全に覚え書きです。参考(というか答え)にさせて頂いたページはこちらです。感謝。

MySQLのLOAD DATA INFILEで大はまりした話 | infoScoop開発者ブログ

ハマってしまっているときに、こういうズバっと一直線な回答にたどり着くとうれしいものです。

Slim を単体で使う場合の方法

Slim を単体で

Ruby 用のテンプレートエンジンである Slim は、一般には Rails 用のテンプレートとして用いられることが多いようですが、単体で Webページ の静的ジェネレーター(というと大げさかもしれませんが)として用いることができます。

続きを読む

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 はてなブログ