2011-02-07 16 views
3

私はRails 3.0.3を使用していますが、Ruby-mysqlからmysql2に変更しましたが、今は次のエラーがあります:Rails 3.0.3と "互換性のない文字エンコーディング"エラー

incompatible character encodings: ASCII-8BIT and UTF-8 

私はこれについてどこでも読んでいますが、私はそれを修正することはできません。

application.rb:

config.encoding = "utf-8" 

database.ymlの:

development: 
    adapter: mysql2 
    encoding: utf8 
    database: rails3_development 
    username: root 
    password: 
    host: localhost 

宝石:

specs: 
    abstract (1.0.0) 
    actionmailer (3.0.3) 
    actionpack (3.0.3) 
    activemodel (3.0.3) 
    activerecord (3.0.3) 
    activeresource (3.0.3) 
    activesupport (3.0.3) 
    arel (2.0.7) 
    bcrypt-ruby (2.1.4) 
    builder (2.1.2) 
    erubis (2.6.6) 
    i18n (0.5.0) 
    jquery-rails (0.2.6) 
    mail (2.2.15) 
    mime-types (1.16) 
    **mysql2 (0.2.6) 
    orm_adapter (0.0.4) 
    paperclip (2.3.8) 
    polyglot (0.3.1) 
    rack (1.2.1) 
    rack-mount (0.6.13) 
    rack-test (0.5.7) 
    rails (3.0.3) 
    railties (3.0.3) 
    rake (0.8.7) 
    thor (0.14.6) 
    treetop (1.4.9) 
    tzinfo (0.3.24) 
    warden (1.0.3) 
    will_paginate (3.0.pre2) 
+0

他の検索者の場合:mysql2およびblobデータ型を使用している場合は、常にバイナリを返します。 BLOBフィールドを 'text'データ型に変更するだけです。エンコードを維持します。 –

答えて

3

私は似たproblを持っていますem:ASCII-8BITエンコーディングを持つ照合utf8_binを持つvarcharフィールド。

問題は、ruby-mysql gemで発生しないため、少なくとも私の場合は、Railsでもmysql設定でもなく、mysql2 gemにあります。

ruby​​-mysqlに切り替えたときに問題がなくなるかどうかをテストしてください。考えられるすべての設定がutf8_bin照合に設定されているMySQLデータベース上の

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> 

この:

ルビー1.9.2にIRBから実行次のコードは、問題を示しています。私は、これはバイナリ(ASCII-8BIT)のエンコードが原因で、多分、設定されている場所であると信じてい

if (fields[i].flags & BINARY_FLAG) { 
    rb_enc_associate(val, binaryEncoding); 
} else ... 

:mysql2宝石で

は、ライン253上の result.cファイルで、次のスニペットがありますutf8_binの照合...私はそれを削除して、問題を解決しましたが、おそらく、ブロブなど他の問題を引き起こす可能性があります。

+0

mysql2の著者がここで答えました:https://github.com/brianmario/mysql2/issues/issue/124解決策は基本的にはutf8_binを使用しないでください。必要ならば、フィールドにforce_encodingを使用してください。 –

+0

問題はruby-mysqlを使って消え去った – fjyaniez

関連する問題