Thanks for your help. I wasn't sure if there was a simple option to
fix my problem or not.
Since I know which encoding Sequel expects to have, I can just convert
my data to that
format.

On Apr 26, 1:16 am, Jeremy Evans <[email protected]> wrote:
> On Apr 25, 4:51 pm, "pYuri.fy" <[email protected]> wrote:
>
>
>
> > I'm trying to save some Japanese data encoded in UTF-8 into a Sqlite3
> > database. When I retrieve a record,
> > I find that the data has been re-encoded to ASCII 8-BIT. This wouldn't
> > be a problem but when I update
> > a field with new UTF-8 data and try to save it, Ruby raises an error:
>
> > Encoding::CompatibilityError: incompatible character encodings: UTF-8
> > and ASCII-8BIT
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > dataset/sql.rb:754:in `join'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > dataset/sql.rb:754:in `update_sql'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > dataset.rb:255:in `update'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > model/base.rb:814:in `_save'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > model/base.rb:687:in `block in save'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > adapters/sqlite.rb:99:in `block (2 levels) in transaction'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.4/lib/
> > sqlite3/database.rb:564:in `transaction'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > adapters/sqlite.rb:99:in `block in transaction'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > connection_pool.rb:110:in `hold'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > database.rb:472:in `synchronize'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > adapters/sqlite.rb:94:in `transaction'
> >         from /usr/local/lib/ruby/gems/1.9.1/gems/sequel-2.12.0/lib/sequel/
> > model/base.rb:687:in `save'
>
> > Is there a way to tell Sequel to use a specific encoding when storing
> > a record? Or a option to set which encoding
> > to use when creating the table?
>
> I'm not sure if SQLite respects character encodings, but that's not
> the issue.  It looks like the issue is joining an array of strings
> inside update_sql.  I'm guessing it thinks the string that joins the
> elements of the array isn't the same as the encoding of one of the
> strings in the array.  I'm guessing the joiner is considered
> ASCII-8BIT and at least one of the strings in the array is UTF8.  I
> don't know if that is fixable easily without forcing the encoding
> before the call to update.
>
> Personally, I think letting each string have its own encoding is a
> terrible mistake, leading to problems like the one you are having.
> IMO, Ruby should have either stayed the way it was (where all strings
> are just arrays of bytes), or gone the python 3.0 route where you have
> byte strings as one type and all character strings are unicode.   I
> know unicode has its problems, but it's better than having to deal
> with this type of problem.  The string encoding issue is the main
> reason that I don't use 1.9.1 in production, FWIW.
>
> Jeremy
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/sequel-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to