2011-02-07 3 views
3

레일즈 3.0.3을 사용하고 있고 mysql2에서 mysql 어댑터를 mysql2로 변경했지만 다음 오류가 발생했습니다 :mysql2 gem, 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 데이터 정렬 ... 제거한 후 문제가 해결되었지만 다른 문제 (예 : blob)가있을 수 있습니다.

+0

mysql2 작성자가 여기에 응답했습니다 : https://github.com/brianmario/mysql2/issues/issue/124 해결책은 기본적으로 utf8_bin을 사용하지 말고 필요하다면 필드에 force_encoding을 사용하십시오. –

+0

문제는 ruby-mysql을 사용하여 사라졌습니다. – fjyaniez

관련 문제