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]