7

Sono stato sempre questo errore in Ruby 1.9, Rails 3.0, ActiveRecord 3.0:Perché ActiveRecord restituisce campi codificati come ASCII-8BIT anche con mysql2 gem?

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

Questo sta accadendo perché la stringa su cui sto cercando di chiamare gsub (che proviene direttamente da una materia oggetto ActiveRecord) ha una codifica di ASCII-8BIT. Ho letto diversi articoli, post e risposte che dicono che questo è causato dalla gemma mysql che codifica le cose sbagliate e suggerisce mysql2.

Ma sto già usando mysql2. Ho provato una versione 0.2.x e l'ultima versione 0.3.7 e né risolvere il problema:

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

ho cambiato la codifica del database e la codifica tavolo in MySQL, ho anche provato a installare il LANG env variabile senza fortuna. C'è un altro posto dove posso guardare o vedere perché sto ottenendo questa codifica sbagliata?

+0

Ecco un altro po 'di informazioni: \ _ \ _ ENCODING \ _ \ _, Encoding.default_external e Encoding.default_internal all return UTF-8 – mltsy

risposta

8

Aha! La mia superficialità della conoscenza colpisce ancora. Il problema era davvero in database.yml:

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

ero ancora usando adapter: mysql quindi, anche se la gemma mysql2 è stato installato non è stato in utilizzato. Non avevo capito che avrei dovuto cambiarne il nome in database.yml; Ho pensato che sarebbe sostituire la vecchia gemma mysql.

Ora lo sappiamo tutti! :)

+0

Nota: questo NON funziona nei progetti DataMapper! Non so perché l'adattatore sia apparentemente chiamato mysql2 in ActiveRecord (?), Ma nei progetti DataMapper, l'uso di 'mysql2' in database.yml causerà solo un errore, perché il nome dell'adattatore DM è" mysql ". DataMapper usa il driver do-mysql, che non ha problemi di codifica dei caratteri, e quindi la gemma mysql2 non è necessaria. E non sarebbe d'aiuto comunque, dal momento che dm-mysql-adapter non lo utilizza. – mltsy

+1

Sto usando MySQL 5.1.71 con Rails 4.0.2 in esecuzione su Ruby 2.0.0-p353. In database.yml, la codifica è impostata su "utf8" e l'adattatore è "mysql2" per tutti gli ambienti. Le mie tabelle utilizzano tutte UTF-8, "CHARSET DEFAULT = utf8 COLLATE = utf8_unicode_ci". Qualche idea su dove altro posso guardare per vedere perché ActiveRecord mi dà le stringhe ASCII-8BIT? –

+0

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

1

Stai impostando correttamente la codifica della connessione in config/database.yml?

development: 
    encoding: utf8 
+0

Non lo ero! Ma l'ho aggiunto al mio file database.yml e non ha cambiato nulla. Sparare. Grazie per l'informazione! – mltsy