sql >> Database >  >> RDS >> Mysql

mysql2 gem, Rails 3.0.3 en incompatibele karaktercoderingsfouten

Ik heb een soortgelijk probleem:een varchar-veld met sortering utf8_bin met een ASCII-8BIT-codering.

Het probleem ligt in de mysql2-edelsteen, niet in Rails, noch in de mysql-instellingen, althans in mijn geval, omdat het niet voorkomt bij de ruby-mysql-edelsteen.

Test of het probleem verdwijnt wanneer u overschakelt naar ruby-mysql.

De volgende code, uitgevoerd vanaf irb op ruby ​​1.9.2, demonstreert het probleem:

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>

Dit op een mysql-database waar elke denkbare instelling is ingesteld op een utf8_bin-sortering.

In de mysql2-edelsteen, in de result.c bestand op regel 253, is er het volgende fragment:

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

Ik geloof dat dit is waar de binaire (ASCII-8BIT) codering wordt ingesteld, misschien vanwege de utf8_bin-sortering... Ik heb het verwijderd en het probleem is opgelost, maar ik weet zeker dat het waarschijnlijk andere problemen zal introduceren, met blobs bijvoorbeeld.




  1. Hulp bij SQL-query - heb twee waar-voorwaarden in samenvoegingsvoorwaarde

  2. Aangepaste tekenreeksen voor datum-/tijdnotatie ondersteund door FORMAT() in SQL Server

  3. MySQL:verkrijg de n-de hoogste waarde voor elke groep in een tabel

  4. Drupal Database Structuur - Efficiënt/Inefficiënt?