Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

đá quý mysql2, Rails 3.0.3 và lỗi mã hóa ký tự không tương thích

Tôi gặp sự cố tương tự:trường varchar với đối chiếu utf8_bin có mã hóa ASCII-8BIT.

Vấn đề nằm ở đá quý mysql2, không phải trong Rails, cũng không phải trong cài đặt mysql, ít nhất là trong trường hợp của tôi, bởi vì nó không xảy ra với đá quý ruby-mysql.

Vui lòng kiểm tra xem sự cố có biến mất khi bạn chuyển sang ruby-mysql không.

Đoạn mã sau, chạy từ irb trên ruby ​​1.9.2, giải thích sự cố:

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>

Điều này trên cơ sở dữ liệu mysql nơi mọi cài đặt có thể tưởng tượng đã được đặt thành đối chiếu utf8_bin.

Trong đá quý mysql2, trong result.c tệp trên dòng 253, có đoạn mã sau:

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

Tôi tin rằng đây là nơi mã hóa nhị phân (ASCII-8BIT) đang được đặt, có thể do đối chiếu utf8_bin ... Tôi đã xóa nó và nó đã giải quyết được sự cố, nhưng tôi chắc chắn rằng nó có thể sẽ gây ra các vấn đề khác, với các đốm màu chẳng hạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận tất cả người dùng ngoại trừ quản trị viên trong mối quan hệ nhiều người

  2. Cách di chuyển MySQL từ Amazon EC2 sang Trung tâm dữ liệu tại chỗ của bạn mà không có thời gian ngừng hoạt động

  3. Lập chỉ mục toàn văn bản trên MyISAM, lập chỉ mục một cột so với lập chỉ mục nhiều cột

  4. SQL Chèn dữ liệu từ nhiều bảng trong cơ sở dữ liệu khác nhau

  5. Ghép kênh php / Mysql Hành vi số học thời gian