sql >> Base de Datos >  >> RDS >> Mysql

mysql2 gem, Rails 3.0.3 y errores de codificación de caracteres incompatibles

Tengo un problema similar:un campo varchar con intercalación utf8_bin que tiene una codificación ASCII-8BIT.

El problema está en la gema mysql2, no en Rails, ni en la configuración de mysql, al menos en mi caso, porque no ocurre con la gema ruby-mysql.

Pruebe si el problema desaparece cuando cambia a ruby-mysql.

El siguiente código, ejecutado desde irb en Ruby 1.9.2, demuestra el problema:

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>

Esto en una base de datos mysql donde cada configuración concebible se ha establecido en una intercalación utf8_bin.

En la gema mysql2, en el result.c archivo en la línea 253, hay el siguiente fragmento:

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

Creo que aquí es donde se establece la codificación binaria (ASCII-8BIT), tal vez debido a la intercalación utf8_bin ... Lo eliminé y resolvió el problema, pero estoy seguro de que probablemente presentará otros problemas, con manchas, por ejemplo.