為什麼sqlite3 open會失敗

2021-10-09 08:14:25 字數 2134 閱讀 2725

我們知道使用sqlite庫,使用sqlite3_open開啟或建立資料庫檔案的時,有的時候會失敗或者資料庫名稱就是亂碼,這是為什麼呢?

(1)在linux平台下,系統編碼是utf8,很少出現問題。

(2)問題主要是windows平台下,如果資料庫檔名稱或路徑有中文,通常會出現錯誤。其實這是sqlite3_open函式的問題,該函式要求檔名稱的引數必須是utf8.

sqlite_api int

sqlite3_open

(const

char

*filename,

/* database filename (utf-8) */

sqlite3 *

*ppdb /* out: sqlite db handle */

);

(1)方法一

sqlite除了使用sqlite3_open開啟資料庫之外,還提供了sqlite3_open16以及sqlite3_open_v2,他們函式原型是

sqlite_api int

sqlite3_open16

(const

void

*filename,

/* database filename (utf-16) */

sqlite3 *

*ppdb /* out: sqlite db handle */);

sqlite_api int

sqlite3_open_v2

(const

char

*filename,

/* database filename (utf-8) */

sqlite3 *

*ppdb,

/* out: sqlite db handle */

int flags,

/* flags */

const

char

*zvfs /* name of vfs module to use */

);

中文windows平台預設字元編碼是gbk,可以使用sqlite3_open16代替sqlite3_open,需要配置vs為字符集:使用 unicode 字符集,包含標頭檔案#include 或者,開啟資料庫如下:

sqlite3_open16

(text

("d:/新建資料夾/測試test.db"

), db)

;

(2)方法二

gbk轉成utf8,**如下

//gbk轉utf8

char

*gbktoutf8_c

(const

char

* chgbk)

//utf8轉gbk

char

*utf8togbk_c

(char

* chutf8)

一定要記得free。

(3)方法三

sqlite封裝了mbcs和utf8之間轉換的函式。可以參考為的

sqlite_api char

*sqlite_stdcall sqlite3_win32_mbcs_to_utf8

(const

char

*ztext)

;sqlite_api char

*sqlite_stdcall sqlite3_win32_utf8_to_mbcs

(const

char

*ztext)

;sqlite_api char

*sqlite_stdcall sqlite3_win32_mbcs_to_utf8_v2

(const

char

*ztext,

int useansi)

;sqlite_api char

*sqlite_stdcall sqlite3_win32_utf8_to_mbcs_v2

(const

char

*ztext,

int useansi)

;

(4)方法四

使用qt的sqlite。

激勵為什麼會失效

摘要 不是注重用外部的力量來激勵員工,而是要用認可和獎勵點燃員工的心中之火。點評 著名的調查公司sirota survey intelligence的一項大型調查表明,大約85 的公司的員工,在入職的時候都是情緒高漲,但是在工作6個月之後,熱情會急劇下降,並在以後的工作中會持續下降。也許正因為這個現...

員工為什麼會離職

網上摘抄的,說得很確切,有參考學習價值,馬雲說 員工的離職原因,只有兩點最真實 1 錢,沒給到位。2 心,委屈了。這些歸根到底就一條 幹得不爽。員工臨走還費盡心思找靠譜的理由,就是為給你留面子,不想說穿你的管理有多爛 他對你已失望透頂。仔細想想,真是人性本善。作為管理者,定要樂於反省。帶團隊,你得問...

員工為什麼會離職?

網上摘抄的,說得很確切,有參考學習價值,馬雲說 員工的離職原因,只有兩點最真實 1 錢,沒給到位。2 心,委屈了。這些歸根到底就一條 幹得不爽。員工臨走還費盡心思找靠譜的理由,就是為給你留面子,不想說穿你的管理有多爛 他對你已失望透頂。仔細想想,真是人性本善。作為管理者,定要樂於反省。帶團隊,你得問...