Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql2 gem, Rails 3.0.3 et erreurs d'encodage de caractères incompatibles

J'ai un problème similaire:un champ varchar avec une collation utf8_bin ayant un encodage ASCII-8BIT.

Le problème réside dans la gemme mysql2, pas dans Rails, ni dans les paramètres mysql, dans mon cas du moins, car cela ne se produit pas avec la gemme ruby-mysql.

Veuillez tester si le problème disparaît lorsque vous passez à ruby-mysql.

Le code suivant, exécuté depuis irb sur ruby ​​1.9.2, illustre le problème :

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>

Ceci sur une base de données mysql où tous les paramètres imaginables ont été définis sur un classement utf8_bin.

Dans le gem mysql2, dans le result.c fichier à la ligne 253, il y a l'extrait suivant :

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

Je crois que c'est là que l'encodage binaire (ASCII-8BIT) est défini, peut-être à cause de la collation utf8_bin ... Je l'ai supprimé et cela a résolu le problème, mais je suis sûr que cela introduira probablement d'autres problèmes, avec des blobs par exemple.