13

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.

redka
  • 309
  • 1
  • 11

2 Answers2

21

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.

Jeremy Evans
  • 11,361
  • 23
  • 25
  • holy damn. I can't believe it was THIS simple. Thank you. – redka Dec 31 '12 at 07:32
  • 1
    The documentations says nothing about this. I nearly went crazy. +100 if I could – The Disintegrator Jun 14 '13 at 09:46
  • I am using Sequel like this in the hope of using `mysql2` adapter, still its not retrieving Arabic characters properly: `Sequel.connect("mysql2://user:pass@localhost/the_database")`, any ideas? – Jikku Jose Oct 15 '14 at 10:06
1

Encoding can be passed as do :

Sequel.connect("mysql2://user:pass@localhost/the_database?encoding=utf8")
Skizo-ozᴉʞS
  • 16,233
  • 16
  • 66
  • 129
abc
  • 11
  • 1