ruby-mysqlで日本語文字列をINSERTする時エラーが出る
from UTF-8 to ISO-8859-1(Encoding::UndefinedConversionError)
下記ブログを参考になんやかんやしてみたけど、INSERTはできるものの文字化けしてどうにもならなかった
Ruby/MySQL で日本語文字列を入れようとして Encoding::UndefinedConversionError が発生する問題 - 自分の歩いた道に落ちてるコード
サーバ側の文字コードのせいだと思って調べた
こちらの、ruby-mysql作者のブログ
Ruby/MySQL 3.0.0 alpha - @tmtms のメモ
Charsetの章
mysqld の default-character-set パラメータが latin1 の場合(これは mysqld のデフォルト値です)、次のスクリプトを実行すると Encoding::UndefinedConversionError 例外が発生します。
原因はこれでした。
対応は以下の通り。
次のように charset を指定すればエラーになりません。なお、Mysql#charset= に指定できる文字列は Ruby のエンコーディング名ではなく、MySQL の charset 名なので "utf-8" ではなく "utf8" です。
# -*- coding:utf-8 -*- require "mysql" Mysql.connect(...) do |my| my.charset = "utf8" p my.query("select 'あいう'").fetch end