Mysql
 sql >> Database >  >> RDS >> Mysql

mysql2 gem, Rails 3.0.3 ed errori di codifica dei caratteri incompatibili

Ho un problema simile:un campo varchar con confronto utf8_bin con una codifica ASCII-8BIT.

Il problema risiede nella gemma mysql2, non in Rails, né nelle impostazioni di mysql, almeno nel mio caso, perché non si verifica con la gemma ruby-mysql.

Verifica se il problema scompare quando passi a ruby-mysql.

Il codice seguente, eseguito da irb su ruby ​​1.9.2, mostra il 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>

Questo su un database mysql in cui ogni impostazione immaginabile è stata impostata su un confronto utf8_bin.

Nella gemma mysql2, nel result.c file alla riga 253, c'è il seguente snippet:

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

Credo che questo sia il punto in cui viene impostata la codifica binaria (ASCII-8BIT), forse a causa del confronto utf8_bin ... L'ho rimosso e ha risolto il problema, ma sono sicuro che probabilmente introdurrà altri problemi, con i BLOB per esempio.