同様の問題があります。ASCII-8BITエンコーディングを持つ照合utf8_binを持つvarcharフィールドです。
問題は、Railsではなくmysql2 gemにあり、少なくとも私の場合はmysql設定にあります。これは、ruby-mysqlgemでは発生しないためです。
ruby-mysqlに切り替えたときに問題が解決するかどうかをテストしてください。
次のコードは、ruby 1.9.2のirbから実行され、問題を示しています。
require 'mysql2'
c = Mysql2::Client.new(host: "localhost", username: "root", database: 'd')
c.query("select word from t where word = 'a'").to_a[0]["word"].encoding
# => #<Encoding:ASCII-8BIT>
これは、考えられるすべての設定がutf8_bin照合に設定されているmysqlデータベースで行われます。
mysql2 gemで、result.c
で 253行目のファイルには、次のスニペットがあります:
if (fields[i].flags & BINARY_FLAG) {
rb_enc_associate(val, binaryEncoding);
} else ...
これは、おそらくutf8_bin照合のために、バイナリ(ASCII-8BIT)エンコーディングが設定されている場所だと思います...削除しました。問題は解決しましたが、おそらく他の問題が発生する可能性があります。たとえば、blobを使用します。