ほめどころ

がうがう

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