Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql2 gem, Rails 3.0.3 i błędy niekompatybilnego kodowania znaków

Mam podobny problem:pole varchar z sortowaniem utf8_bin posiadające kodowanie ASCII-8BIT.

Problem leży w gemie mysql2, a nie w Railsach, ani w ustawieniach mysql, przynajmniej w moim przypadku, ponieważ nie występuje w gemie ruby-mysql.

Sprawdź, czy problem zniknie po przejściu na ruby-mysql.

Poniższy kod, uruchamiany z irb na ruby ​​1.9.2, demonstruje 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>

To w bazie danych mysql, gdzie każde możliwe ustawienie zostało ustawione na sortowanie utf8_bin.

W gemie mysql2, w result.c pliku w wierszu 253, jest następujący fragment:

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

Uważam, że to jest miejsce, w którym ustawia się kodowanie binarne (ASCII-8BIT), może z powodu sortowania utf8_bin ... usunąłem go i rozwiązało to problem, ale jestem pewien, że prawdopodobnie wprowadzi inne problemy, na przykład z plamami.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd podczas zmiany nazwy kolumny w MySQL

  2. Jak zinterpretować dane wyjściowe MySQL EXPLAIN?

  3. Ionic framework i php mysql

  4. Nazwy zestawów MySQL ODBC 5.1 nie są dozwolone przez sterownik

  5. mysql wybierz dynamiczne wartości wierszy jako nazwy kolumn, inną kolumnę jako wartość