7

I zostały otrzymuję ten błąd w Ruby 1.9 Rails 3.0, 3.0 ActiveRecord:Dlaczego ActiveRecord zwraca pola zakodowane jako ASCII-8BIT nawet z klejnotem mysql2?

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

Dzieje się tak dlatego, że łańcuch, na którym próbuję zadzwonić gsub (która pochodzi bezpośrednio od obiektu pola ActiveRecord) ma kodowanie ASCII-8BIT. Czytałem kilka artykułów, wpisów i odpowiedzi, mówiących, że jest to spowodowane błędem mysql kodującym rzeczy i sugerowaniem mysql2.

Ale używam już mysql2. Próbowałem w wersji 0.2.x oraz najnowszej wersji 0.3.7 i nie rozwiązuje problemu:

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

Zmieniłem kodowanie bazy danych i kodowanie tabel w MySQL, ja też próbowałem ustawienie Zmienna LANG env bez powodzenia. Czy jest gdziekolwiek indziej mogę wyglądać lub zobaczyć, dlaczego otrzymuję błędne kodowanie?

+0

Oto kolejny fragment informacji: \ _ \ _ ENCODING \ _ \ _, Encoding.default_external i Encoding.default_internal wszystko zwróciło UTF-8 – mltsy

Odpowiedz

8

Aha! Moja płytkość wiedzy znowu uderza. Problemem było rzeczywiście w database.yml:

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

ja wciąż przy adapter: mysql więc chociaż mysql2 klejnot został zainstalowany nie był ewidentnie wykorzystywane. Nie wiedziałem, że będę musiał zmienić nazwę tego w database.yml; Pomyślałem, że będzie to zastąpić stary klejnot .

Teraz wszyscy wiemy! :)

+0

Uwaga: To NIE działa w projektach DataMapper! Nie wiem, dlaczego adapter jest najwyraźniej nazywany mysql2 w ActiveRecord (?), Ale w projektach DataMapper użycie 'mysql2' w database.yml spowoduje tylko błąd, ponieważ nazwa adaptera DM używa' mysql'. DataMapper używa sterownika do-mysql, który nie ma problemów z kodowaniem znaków, więc klejnot mysql2 jest niepotrzebny. I tak nie pomoże, ponieważ dm-mysql-adapter go nie wykorzystuje. – mltsy

+1

Używam MySQL 5.1.71 z Rails 4.0.2 na Ruby 2.0.0-p353. W database.yml kodowanie jest ustawione na "utf8", a karta jest "mysql2" dla wszystkich środowisk. Moje tabele używają UTF-8, "DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci". Wszelkie pomysły dotyczące tego, gdzie jeszcze mogę sprawdzić, dlaczego ActiveRecord przekazuje mi ciągi ASCII-8BIT? –

+0

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

1

Czy prawidłowo ustawiasz kodowanie połączenia w config/database.yml?

development: 
    encoding: utf8 
+0

Nie byłem! Ale dodałem to do mojego pliku database.yml i nic nie zmieniłem. Strzelać. Dzięki za podpowiedź! – mltsy

Powiązane problemy