一、 使用Sqliteman建立UTF-8和auto_vacuum=1的資料庫
1.1 Sqliteman->New 建立新資料庫
1.2 左邊菜單切換到Pragmas
1.3 選中auto_vacuum這行,點選下方Change Value按鈕,輸入1,點确定
1.4 選中encoding這行,同上,但是不能直接輸入UTF-8,得輸入UTF8或者"UTF-8"(帶雙引号)點确定
1.5 最後随便建立一個表,然後退出即可。再次打開即可看到變更後效果,否則在已經存在表的資料庫中你無法修改這兩個值的。
二、 使用sql語句來建立庫和表
上面用Sqliteman建立資料庫并沒有解決我的問題,仍然被亂碼、錯誤代碼4和8困擾,無奈之下隻好用sql來建立和導入初始資料。在CppSQLiteDemo/CppSQLite3Demo.cpp的mian函數中直接寫sql語句了,如下:
remove(gszFile);
db.open(gszFile);
//建立config
db.execDML("create table config(id INTEGER, key TEXT, value TEXT, defaultvalue TEXT, desc TEXT);");
db.execDML("insert into config values ('1', 'IsAutoSync', '0', '1', '測試資料');");
漢字部分用Sqliteman打開檢視是仍然是亂碼,但是程式讀取出來沒有問題。
三、 注意
3.1 本文使用的代碼和庫均是參考文章中的庫和代碼,從代碼中可以看出是采用UTF-8打開的連接配接,使用的方法是sqlite3_open而不是sqlite3_open16,而Sqliteman預設是UTF-16le。
3.2 CppSQLiteDemo下的工程為VC6的工程,打開後執行報錯,你需要把Common/sqlite3.dll拷貝到Debug目錄下即可。
四、補充
4.1 2010-5-21 想自動增長的話設定成INTEGER PRIMARY KEY就可以了,如下:
db.execDML("create table config(id INTEGER PRIMARY KEY, key TEXT, value TEXT, defaultvalue TEXT, desc TEXT);");
db.execDML("insert into config(key,value,defaultvalue,desc) values ('IsAutoSync', '0', '1', '測試');");