sql >> Databasteknik >  >> RDS >> Mysql

mysql2 gem, Rails 3.0.3 och inkompatibla teckenkodningsfel

Jag har ett liknande problem:ett varchar-fält med kollation utf8_bin som har en ASCII-8BIT-kodning.

Problemet ligger i mysql2 ädelstenen, inte i Rails, inte heller i mysql-inställningarna, åtminstone i mitt fall, eftersom det inte förekommer med ruby-mysql ädelstenen.

Testa om problemet försvinner när du byter till ruby-mysql.

Följande kod, körd från irb på ruby ​​1.9.2, visar problemet:

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>

Detta på en mysql-databas där alla tänkbara inställningar har satts till en utf8_bin-kollation.

I mysql2 pärla, i result.c fil på rad 253, det finns följande kodavsnitt:

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

Jag tror att det är här den binära (ASCII-8BIT) kodningen ställs in, kanske på grund av utf8_bin-kollationen... Jag har tagit bort den och det löste problemet, men jag är säker på att det förmodligen kommer att introducera andra problem, med blobbar till exempel.




  1. Få rekord per månad men få även noll om inga rekord den månaden

  2. Samla schemastatistik med FND_STATS i EBS 11i och R12

  3. Fånga MySQL-varningar i Python

  4. Versionering av SQL Server-databas