Hi, sqlite offers two versions of *most* functions that deal with
text, a UTF-8 character version and a UTF-16 character version, for
example:

int sqlite3_prepare(
  sqlite3 *db,            /* Database handle */
  const char *zSql,       /* SQL statement, UTF-8 encoded */
  int nBytes,             /* Length of zSql in bytes. */
  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
);
int sqlite3_prepare16(
  sqlite3 *db,            /* Database handle */
  const void *zSql,       /* SQL statement, UTF-16 encoded */
  int nBytes,             /* Length of zSql in bytes. */
  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
  const void **pzTail     /* OUT: Pointer to unused portion of zSql */
);

I used the following typedef to allow a single version of my source to
be compiled with UNICODE (and _UNICODE) or MBCS:

typedef std::basic_string<TCHAR>                        tstring;

accompanied by the following defines:

// TCHAR based sqlite3 function names for Unicode and/or non-Unicode builds
#if defined(_UNICODE) || defined(UNICODE)
#define sqlite3t_aggregate_context              sqlite3_aggregate_context
#define sqlite3t_aggregate_count                sqlite3_aggregate_count
#define sqlite3t_bind_blob                              sqlite3_bind_blob
#define sqlite3t_bind_double                    sqlite3_bind_double
#define sqlite3t_bind_int                               sqlite3_bind_int
#define sqlite3t_bind_int64                             sqlite3_bind_int64
#define sqlite3t_bind_null                              sqlite3_bind_null
#define sqlite3t_bind_parameter_count   sqlite3_bind_parameter_count
#define sqlite3t_bind_parameter_index   sqlite3_bind_parameter_index
#define sqlite3t_bind_parameter_name    sqlite3_bind_parameter_name
#define sqlite3t_bind_text                              sqlite3_bind_text16
#define sqlite3t_bind_text16                    sqlite3_bind_text16
#define sqlite3t_busy_handler                   sqlite3_busy_handler
#define sqlite3t_busy_timeout                   sqlite3_busy_timeout
#define sqlite3t_changes                                sqlite3_changes
#define sqlite3t_close                                  sqlite3_close
#define sqlite3t_collation_needed               sqlite3_collation_needed16
#define sqlite3t_collation_needed16             sqlite3_collation_needed16
#define sqlite3t_column_blob                    sqlite3_column_blob
#define sqlite3t_column_bytes                   sqlite3_column_bytes16
#define sqlite3t_column_bytes16                 sqlite3_column_bytes16
#define sqlite3t_column_count                   sqlite3_column_count
#define sqlite3t_column_decltype                sqlite3_column_decltype16
#define sqlite3t_column_decltype16              sqlite3_column_decltype16
#define sqlite3t_column_double                  sqlite3_column_double
#define sqlite3t_column_int                             sqlite3_column_int
#define sqlite3t_column_int64                   sqlite3_column_int64
#define sqlite3t_column_name                    sqlite3_column_name16
#define sqlite3t_column_name16                  sqlite3_column_name16
#define sqlite3t_column_text                    sqlite3_column_text16
#define sqlite3t_column_text16                  sqlite3_column_text16
#define sqlite3t_column_type                    sqlite3_column_type
#define sqlite3t_commit_hook                    sqlite3_commit_hook
#define sqlite3t_complete                               sqlite3_complete16
#define sqlite3t_complete16                             sqlite3_complete16
#define sqlite3t_create_collation               sqlite3_create_collation16
#define sqlite3t_create_collation16             sqlite3_create_collation16
#define sqlite3t_create_function                sqlite3_create_function16
#define sqlite3t_create_function16              sqlite3_create_function16
#define sqlite3t_data_count                             sqlite3_data_count
#define sqlite3t_errcode                                sqlite3_errcode
#define sqlite3t_errmsg                                 sqlite3_errmsg16
#define sqlite3t_errmsg16                               sqlite3_errmsg16
#define sqlite3t_exec                                   sqlite3_exec
#define sqlite3t_finalize                               sqlite3_finalize
#define sqlite3t_free                                   sqlite3_free
#define sqlite3t_free_table                             sqlite3_free_table
#define sqlite3t_get_table                              sqlite3_get_table
#define sqlite3t_interrupt                              sqlite3_interrupt
#define sqlite3t_last_insert_rowid              sqlite3_last_insert_rowid
#define sqlite3t_libversion                             sqlite3_libversion
#define sqlite3t_mprintf                                sqlite3_mprintf
#define sqlite3t_open                                   sqlite3_open16
#define sqlite3t_open16                                 sqlite3_open16
#define sqlite3t_prepare                                sqlite3_prepare16
#define sqlite3t_prepare16                              sqlite3_prepare16
#define sqlite3t_progress_handler               sqlite3_progress_handler
#define sqlite3t_reset                                  sqlite3_reset
#define sqlite3t_result_blob                    sqlite3_result_blob
#define sqlite3t_result_double                  sqlite3_result_double
#define sqlite3t_result_error                   sqlite3_result_error16
#define sqlite3t_result_error16                 sqlite3_result_error16
#define sqlite3t_result_int                             sqlite3_result_int
#define sqlite3t_result_int64                   sqlite3_result_int64
#define sqlite3t_result_null                    sqlite3_result_null
#define sqlite3t_result_text                    sqlite3_result_text16
#define sqlite3t_result_text16                  sqlite3_result_text16
#define sqlite3t_result_text16be                sqlite3_result_text16be
#define sqlite3t_result_text16le                sqlite3_result_text16le
#define sqlite3t_result_value                   sqlite3_result_value
#define sqlite3t_set_authorizer                 sqlite3_set_authorizer
#define sqlite3t_step                                   sqlite3_step
#define sqlite3t_total_changes                  sqlite3_total_changes
#define sqlite3t_trace                                  sqlite3_trace
#define sqlite3t_user_data                              sqlite3_user_data
#define sqlite3t_value_blob                             sqlite3_value_blob
#define sqlite3t_value_bytes                    sqlite3_value_bytes16
#define sqlite3t_value_bytes16                  sqlite3_value_bytes16
#define sqlite3t_value_double                   sqlite3_value_double
#define sqlite3t_value_int                              sqlite3_value_int
#define sqlite3t_value_int64                    sqlite3_value_int64
#define sqlite3t_value_text                             sqlite3_value_text16
#define sqlite3t_value_text16                   sqlite3_value_text16
#define sqlite3t_value_text16be                 sqlite3_value_text16be
#define sqlite3t_value_text16le                 sqlite3_value_text16le
#define sqlite3t_value_type                             sqlite3_value_type
#define sqlite3t_vmprintf                               sqlite3_vmprintf
#else
#define sqlite3t_aggregate_context              sqlite3_aggregate_context
#define sqlite3t_aggregate_count                sqlite3_aggregate_count
#define sqlite3t_bind_blob                              sqlite3_bind_blob
#define sqlite3t_bind_double                    sqlite3_bind_double
#define sqlite3t_bind_int                               sqlite3_bind_int
#define sqlite3t_bind_int64                             sqlite3_bind_int64
#define sqlite3t_bind_null                              sqlite3_bind_null
#define sqlite3t_bind_parameter_count   sqlite3_bind_parameter_count
#define sqlite3t_bind_parameter_index   sqlite3_bind_parameter_index
#define sqlite3t_bind_parameter_name    sqlite3_bind_parameter_name
#define sqlite3t_bind_text                              sqlite3_bind_text
#define sqlite3t_bind_text16                    sqlite3_bind_text16
#define sqlite3t_busy_handler                   sqlite3_busy_handler
#define sqlite3t_busy_timeout                   sqlite3_busy_timeout
#define sqlite3t_changes                                sqlite3_changes
#define sqlite3t_close                                  sqlite3_close
#define sqlite3t_collation_needed               sqlite3_collation_needed
#define sqlite3t_collation_needed16             sqlite3_collation_needed16
#define sqlite3t_column_blob                    sqlite3_column_blob
#define sqlite3t_column_bytes                   sqlite3_column_bytes
#define sqlite3t_column_bytes16                 sqlite3_column_bytes16
#define sqlite3t_column_count                   sqlite3_column_count
#define sqlite3t_column_decltype                sqlite3_column_decltype
#define sqlite3t_column_decltype16              sqlite3_column_decltype16
#define sqlite3t_column_double                  sqlite3_column_double
#define sqlite3t_column_int                             sqlite3_column_int
#define sqlite3t_column_int64                   sqlite3_column_int64
#define sqlite3t_column_name                    sqlite3_column_name
#define sqlite3t_column_name16                  sqlite3_column_name16
#define sqlite3t_column_text                    sqlite3_column_text
#define sqlite3t_column_text16                  sqlite3_column_text16
#define sqlite3t_column_type                    sqlite3_column_type
#define sqlite3t_commit_hook                    sqlite3_commit_hook
#define sqlite3t_complete                               sqlite3_complete
#define sqlite3t_complete16                             sqlite3_complete16
#define sqlite3t_create_collation               sqlite3_create_collation
#define sqlite3t_create_collation16             sqlite3_create_collation16
#define sqlite3t_create_function                sqlite3_create_function
#define sqlite3t_create_function16              sqlite3_create_function16
#define sqlite3t_data_count                             sqlite3_data_count
#define sqlite3t_errcode                                sqlite3_errcode
#define sqlite3t_errmsg                                 sqlite3_errmsg
#define sqlite3t_errmsg16                               sqlite3_errmsg16
#define sqlite3t_exec                                   sqlite3_exec
#define sqlite3t_finalize                               sqlite3_finalize
#define sqlite3t_free                                   sqlite3_free
#define sqlite3t_free_table                             sqlite3_free_table
#define sqlite3t_get_table                              sqlite3_get_table
#define sqlite3t_interrupt                              sqlite3_interrupt
#define sqlite3t_last_insert_rowid              sqlite3_last_insert_rowid
#define sqlite3t_libversion                             sqlite3_libversion
#define sqlite3t_mprintf                                sqlite3_mprintf
#define sqlite3t_open                                   sqlite3_open
#define sqlite3t_open16                                 sqlite3_open16
#define sqlite3t_prepare                                sqlite3_prepare
#define sqlite3t_prepare16                              sqlite3_prepare16
#define sqlite3t_progress_handler               sqlite3_progress_handler
#define sqlite3t_reset                                  sqlite3_reset
#define sqlite3t_result_blob                    sqlite3_result_blob
#define sqlite3t_result_double                  sqlite3_result_double
#define sqlite3t_result_error                   sqlite3_result_error
#define sqlite3t_result_error16                 sqlite3_result_error16
#define sqlite3t_result_int                             sqlite3_result_int
#define sqlite3t_result_int64                   sqlite3_result_int64
#define sqlite3t_result_null                    sqlite3_result_null
#define sqlite3t_result_text                    sqlite3_result_text
#define sqlite3t_result_text16                  sqlite3_result_text16
#define sqlite3t_result_text16be                sqlite3_result_text16be
#define sqlite3t_result_text16le                sqlite3_result_text16le
#define sqlite3t_result_value                   sqlite3_result_value
#define sqlite3t_set_authorizer                 sqlite3_set_authorizer
#define sqlite3t_step                                   sqlite3_step
#define sqlite3t_total_changes                  sqlite3_total_changes
#define sqlite3t_trace                                  sqlite3_trace
#define sqlite3t_user_data                              sqlite3_user_data
#define sqlite3t_value_blob                             sqlite3_value_blob
#define sqlite3t_value_bytes                    sqlite3_value_bytes
#define sqlite3t_value_bytes16                  sqlite3_value_bytes16
#define sqlite3t_value_double                   sqlite3_value_double
#define sqlite3t_value_int                              sqlite3_value_int
#define sqlite3t_value_int64                    sqlite3_value_int64
#define sqlite3t_value_text                             sqlite3_value_text
#define sqlite3t_value_text16                   sqlite3_value_text16
#define sqlite3t_value_text16be                 sqlite3_value_text16be
#define sqlite3t_value_text16le                 sqlite3_value_text16le
#define sqlite3t_value_type                             sqlite3_value_type
#define sqlite3t_vmprintf                               sqlite3_vmprintf
#endif

Using this method, I store all strings in tstring's and use the
sqlite3t_* version of any sqlite function call and it works for both
unicode and mbcs builds in windows.

Hope that helps, or at least gives you some ideas how to approach the
"problem"... :)

--
jthomps

On Sat, 15 Jan 2005 10:51:03 -0400, LIN, Ming Q. <[EMAIL PROTECTED]> wrote:
> Hello,
> 
> I am new to sqlite, I am using it for my unicode project in windows
> platform. In windows, Unicode uses wchar variable, but it looks like the
> sqlite only take char for parameters. Do anyone know how to store unicode
> (such as chinese, japanese) in sqlite. I am using visual studio 2003 and
> windows 2000 OS.
> 
> Thank you in advance.
> 
> Ming
> 


-- 
Jeff Thompson
[EMAIL PROTECTED]

Reply via email to