Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sequel never returns utf-8, just ascii-8bit

There is this mysql database I'm trying to connect to. DataMapper fetches everything nicely in UTF-8 but Sequel always returns strings in ASCII-8bit which produces errors with .to_json.

I have tried several things in order to get it to work.

Encoding.default_external = Encoding::UTF_8  
Encoding.default_internal = Encoding::UTF_8  
DB.run 'set names utf8'  
Sequel.mysql 'db', (...), :encoding => 'utf-8'  

I have gems: mysql (2.9.0) (tried without), mysql2 (0.3.11) and sequel (3.42.0)

The only thing that works is manually forcing the encoding on every string which is MUCH less than ideal.

like image 368
redka Avatar asked Dec 28 '12 13:12

redka


2 Answers

Try Sequel.mysql2 instead of Sequel.mysql. Sequel.mysql uses the old mysql driver instead of the new mysql2 driver, and I don't believe the mysql driver supports encodings.

like image 99
Jeremy Evans Avatar answered Sep 28 '22 12:09

Jeremy Evans


Encoding can be passed as do :

Sequel.connect("mysql2://user:pass@localhost/the_database?encoding=utf8")
like image 42
abc Avatar answered Sep 28 '22 11:09

abc