sql >> Databáze >  >> RDS >> Mysql

mysql2 gem, Rails 3.0.3 a chyby nekompatibilního kódování znaků

Mám podobný problém:pole varchar s řazením utf8_bin s kódováním ASCII-8BIT.

Problém spočívá v drahokamu mysql2, ne v Rails, ani v nastavení mysql, alespoň v mém případě, protože se nevyskytuje u drahokamu ruby-mysql.

Otestujte prosím, zda problém po přepnutí na ruby-mysql nezmizí.

Následující kód, spuštěný z irb na ruby ​​1.9.2, demonstruje problém:

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>

To v databázi mysql, kde bylo každé myslitelné nastavení nastaveno na řazení utf8_bin.

V klenotu mysql2 v result.c soubor na řádku 253, je zde následující úryvek:

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

Věřím, že zde se nastavuje binární (ASCII-8BIT) kódování, možná kvůli řazení utf8_bin... Odstranil jsem to a problém vyřešil, ale jsem si jistý, že to pravděpodobně způsobí další problémy, například s kuličkami.




  1. Získejte předchozí a další řádek z řádků vybraných s podmínkami (WHERE).

  2. Je lepší použít prázdnou hodnotu jako '' nebo jako NULL?

  3. Velké tabulky a analýzy v MySql

  4. Open source nástroj pro vytváření diagramů ER pro mysql