7

Ben Ruby 1.9 bu hatayı alıyorum edilmiştir, 3.0 ActiveRecord 3,0 Raylar: Bu dize hangi I (bir ActiveRecord nesne alanına doğrudan geldiği) gsub aramaya çalışıyorum çünkü oluyorNeden ActiveRecord, mysql2 gem ile bile ASCII-8BIT olarak kodlanmış alanları döndürür?

incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) 

ASCII-8BIT'un bir kodlamasına sahiptir. Ben mysql gem yanlış şeyler kodlama ve mysql2 düşündüren neden olduğunu söyleyerek birkaç makale, yazı ve cevap okudum.

Ama zaten mysql2 kullanıyorum. Bir 0.2.x versiyonunu ve en son 0.3.7 sürümünü denedik ve ne sorunu çözmek ettik: Ben MySQL veritabanı kodlama ve masa kodlamasını değiştirdik

irb> str = Discussion.first.content 
=> "Something's wrong with encodings..." 
irb> str.encoding 
=> #<Encoding:ASCII-8BIT> 

, ben de ayarlama denedim Şanssız LANG env değişkeni. Bakabileceğim başka bir yer var mı, neden bu yanlış kodlamayı alıyorum?

+0

İşte bir başka bilgi: \ _ \ _ ENCODING \ _ \ _, Encoding.default_external ve Encoding.default_internal tüm dönüşler UTF-8 – mltsy

cevap

8

Aha! Bilgimin sığışı yine tekrar vurur. Sorun database.yml gerçekten karardan: mysql2 taş o kullanılan varlık değildi yüklendiği gerçi hala çok bile adapter: mysql kullanıyordum

development: 
    encoding: utf8 
    adapter: mysql2 
    [...] 

. Bunun ismini database.yml;'un eski mysql gemini değiştireceğini düşündüm.

Şimdi hepimiz biliyoruz! :)

+0

Not: Bu DataMapper projelerinde çalışmıyor! Bağdaştırıcının neden ActiveRecord (?) Içinde mysql2 olarak adlandırıldığını bilmiyorum, ancak DataMapper projelerinde, database.yml içinde 'mysql2' kullanıldığında sadece bir hataya neden olacak, çünkü bağdaştırıcının DM kullandığı ad' mysql'dir. DataMapper, karakter kodlama sorunları olmayan do-mysql sürücüsünü kullanır ve böylece mysql2 gem gereksizdir. Ve dm-mysql-adaptör onu kullanmadığı için yine de yardımcı olmaz. – mltsy

+1

Ruby 2.0.0-p353 üzerinde çalışan Rails 4.0.2 ile MySQL 5.1.71 kullanıyorum. database.yml'de kodlama "utf8" olarak ayarlanır ve tüm ortamlar için "mysql2" bağdaştırıcısıdır. Tablolarımın tümü UTF-8, "DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci" kullanıyor. ActiveRecord'ın neden ASCII-8BIT dizelerini neden kullandığını görmek için başka nerede bulabileceğime dair herhangi bir fikir var mı? –

+0

Burada http://stackoverflow.com/questions/22719767/activerecord-in-rails-4-0-4-gives-ascii-8bit-with-mysql2-encoding-set-to-utf8 –

1

config/database.yml numaralı telefondan bağlantıyı doğru bir şekilde kodluyor musunuz?

development: 
    encoding: utf8 
+0

Ben değildim! Ama bunu database.yml dosyasına ekledim ve hiçbir şey değiştirmedi. Ateş etme. İpucu için teşekkürler! – mltsy

İlgili konular