[odb-users] SQLite and std::wstring

philly.dilly at gmail.com philly.dilly at gmail.com
Thu Jun 7 09:53:59 EDT 2012


Hi (again) Boris,
Although utf8 is generally a more compact encoding, in my case I will be  
using wstring since my application deals with a lot of non latin languages  
and processing utf16 is a lot easier. I tried mapping std::wstring to TEXT  
with pragmas but then I got some compilation errors about wrong number of  
arguments or something. I'll definitely look into the mapping example!

Cheers,

Phil

On , Boris Kolpackov <boris at codesynthesis.com> wrote:
> Hi Philippe,



> Philippe Cadieux-Pelletier philly.dilly at gmail.com> writes:



> > It seems like a pretty severe shortcoming of the SQLite database binding

> > not to support std::wstring.



> I wouldn't call it "severe" since you can easily add a custom mapping

> for the std::wstring type (see the 'mapping' example).





> > Are there any plans to add support?



> Yes, we can implement built-in support if you need it.





> > I can think of two ways to add support off the top of my head:

> >

> > 1. Have some kind of setting, either at compile time or runtime, that

> > will bind SQLite's TEXT type to std::wstring and configure the SQLite

> > database to use utf16 for TEXT. This would mean that you would have to  
> pick

> > either utf8 or utf16, but at least you'd have the option of supporting

> > std::wstring.

> > 2. C++ 11 adds std::codecvt_utf8_utf16 to convert between utf8 and

> > utf16. It would then be possible to convert at runtime therefore being  
> able

> > to support both std::string and std::wstring



> In SQLite the database encoding (specified with 'PRAGMA encoding') and

> the encoding used in the application to bind parameters/results are

> somewhat independent. That is, if the database is UTF-8 and we pass

> UTF-16 text or if the database is UTF-16 and we pass UTF-8, then

> SQLite performs automatic conversions as required. So, in this light,

> it would be best to pass std::wstring as UTF-16 and let SQLite

> determine what to do. This will also give the user the flexibility

> to make the database either UTF-8 or UTF-16 without any changes to

> ODB or generated code.



> BTW, which database encoding are you planning to use in your case?



> Boris




More information about the odb-users mailing list