7

Tôi đã được nhận được lỗi này trong Ruby 1,9, Rails 3.0, ActiveRecord 3.0:Tại sao ActiveRecord trả lại các trường được mã hóa dưới dạng ASCII-8BIT ngay cả với đá quý mysql2?

incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) 

này đang xảy ra bởi vì các chuỗi trên mà tôi đang cố gắng để gọi gsub (mà đến trực tiếp từ một lĩnh vực đối tượng ActiveRecord) có mã hóa ASCII-8BIT. Tôi đã đọc một số bài báo, bài viết và câu trả lời nói rằng điều này là do đá quý mysql mã hóa những điều sai trái, và gợi ý mysql2.

Nhưng tôi đang sử dụng mysql2 rồi. Tôi đã thử một phiên bản 0.2.x và phiên bản mới nhất 0.3.7 và không giải quyết vấn đề:

irb> str = Discussion.first.content 
=> "Something's wrong with encodings..." 
irb> str.encoding 
=> #<Encoding:ASCII-8BIT> 

Tôi đã thay đổi mã hóa cơ sở dữ liệu và mã hóa bảng trong MySQL, tôi cũng đã cố gắng thiết lập Biến LANG env không có may mắn. Có nơi nào khác tôi có thể xem hoặc để xem tại sao tôi nhận được mã hóa sai này?

+0

Dưới đây là một số thông tin khác: \ _ \ _ ENCODING \ _ \ _, Encoding.default_external và Encoding.default_internal tất cả trả về UTF-8 – mltsy

Trả lời

8

Aha! Myownown của kiến ​​thức đình công một lần nữa. Vấn đề là thực sự trong database.yml:

development: 
    encoding: utf8 
    adapter: mysql2 
    [...] 

tôi vẫn còn sử dụng adapter: mysql nên mặc dù mysql2 đá quý đã được cài đặt nó đã không được sử dụng . Tôi không nhận ra mình phải đổi tên nó thành database.yml; Tôi nghĩ rằng nó sẽ thay thế cũ đá quý mysql.

Bây giờ chúng ta đều biết! :)

+0

Lưu ý: Điều này KHÔNG làm việc trong các dự án DataMapper! Tôi không biết tại sao adapter được gọi là mysql2 trong ActiveRecord (?), Nhưng trong các dự án DataMapper, sử dụng 'mysql2' trong database.yml sẽ chỉ gây ra lỗi, vì tên của bộ điều hợp DM sử dụng là' mysql'. DataMapper sử dụng trình điều khiển do-mysql, không có các vấn đề về mã hóa ký tự và do đó đá quý mysql2 là không cần thiết. Và sẽ không giúp đỡ anyway, kể từ khi dm-mysql-adapter không sử dụng nó. – mltsy

+1

Tôi đang sử dụng MySQL 5.1.71 với Rails 4.0.2 chạy trên Ruby 2.0.0-p353. Trong database.yml, mã hóa được đặt thành "utf8" và bộ điều hợp là "mysql2" cho tất cả các môi trường. Các bảng của tôi đều sử dụng UTF-8, "DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci". Bất kỳ ý tưởng nào về nơi tôi có thể xem để xem tại sao ActiveRecord đưa cho tôi chuỗi ASCII-8BIT? –

+0

Đã hỏi tại đây http://stackoverflow.com/questions/22719767/activerecord-in-rails-4-0-4-gives-ascii-8bit-with-mysql2-encoding-set-to-utf8 –

1

Bạn có đang đặt mã hóa kết nối chính xác trong config/database.yml không?

development: 
    encoding: utf8 
+0

Tôi đã không! Nhưng tôi đã thêm vào tệp database.yml của mình và nó không thay đổi gì cả. Bắn. Cảm ơn các mẹo mặc dù! – mltsy

Các vấn đề liên quan