Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

gem mysql2, Rails 3.0.3 e erros de codificação de caracteres incompatíveis


Eu tenho um problema semelhante:um campo varchar com collation utf8_bin com uma codificação ASCII-8BIT.

O problema está na gem mysql2, não no Rails, nem nas configurações do mysql, pelo menos no meu caso, pois não ocorre com a gem ruby-mysql.

Por favor, teste se o problema desaparece quando você muda para ruby-mysql.

O código a seguir, executado a partir do irb no ruby ​​1.9.2, demonstra o 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>

Isso em um banco de dados mysql onde todas as configurações concebíveis foram definidas para um agrupamento utf8_bin.

Na gem mysql2, no result.c arquivo na linha 253, há o seguinte trecho:
if (fields[i].flags & BINARY_FLAG) {
  rb_enc_associate(val, binaryEncoding);
} else ...

Eu acredito que é aqui que a codificação binária (ASCII-8BIT) está sendo definida, talvez por causa do agrupamento utf8_bin ... Eu a removi e resolveu o problema, mas tenho certeza que provavelmente apresentará outros problemas, com blobs, por exemplo.