Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fehler bei mysql2 gem, Rails 3.0.3 und inkompatiblen Zeichenkodierungen

Ich habe ein ähnliches Problem:ein Varchar-Feld mit der Sortierung utf8_bin mit einer ASCII-8BIT-Codierung.

Das Problem liegt im mysql2-Gem, nicht in Rails, noch in den mysql-Einstellungen, zumindest in meinem Fall, weil es beim ruby-mysql-Gem nicht auftritt.

Bitte testen Sie, ob das Problem verschwindet, wenn Sie zu ruby-mysql wechseln.

Der folgende Code, der von irb auf Ruby 1.9.2 ausgeführt wird, demonstriert das Problem:

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>

Dies auf einer MySQL-Datenbank, in der jede denkbare Einstellung auf eine utf8_bin-Kollatierung gesetzt wurde.

Im mysql2-Gem, in result.c Datei in Zeile 253, gibt es das folgende Snippet:

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

Ich glaube, hier wird die binäre (ASCII-8BIT) Codierung eingestellt, vielleicht wegen der utf8_bin-Sortierung ... Ich habe sie entfernt und sie hat das Problem gelöst, aber ich bin sicher, dass sie wahrscheinlich andere Probleme einführen wird, mit Blobs zum Beispiel.