C++存储特殊字符("ç","á" ,..等)在SQLite数据库上

c++ store special characters ("ç", "á",..etc) on SQLite db

本文关键字:SQLite 数据库 #225 特殊字符 #231 C++ 存储      更新时间:2023-10-16

我的程序使用SQLite3库打开并执行一些对本地数据库的查询。这是我用来执行查询(显示错误)的函数:

void exec(string query, string place_error){
    if( sqlite3_exec(sqldb,query.c_str(),0,0,&db_err) != SQLITE_OK) 
        sql_error(place_error+" - "+(string)db_err);
}

现在,如果我尝试执行如下命令:

exec("INSERT INTO table (testTable) VALUES('ççç')","Insert_Error");

它将存储像这样的符号。

如果我运行sqlite3 shell并执行这个完全相同的查询,它将无法工作,因为它也会存储奇怪的字符。

我可以存储字符如"ç"或""的唯一方法是使用SQLiteStudio,但这不是我需要的,甚至不是sqlite3 shell。我只需要这个工作在我的代码。

数据库默认是UTF-8编码,所以有什么特殊的语句,我应该添加到查询?或者问题出在别的地方。

感谢

PS:我也在我的程序上使用QT库。我需要存储的所有信息通常都转换为utf8(使用. toutf8 (). constdata())。我确保在exec()参数上接收到的查询是正确的,并且所有的特殊字符都是正确的。

虽然它似乎是错误的字符,当你试图存储像"ç"或" ",这些字符是"好"。如果我创建一个函数(SELECT)将列文本返回到字符串,它就能工作。如果你像我一样使用QT你只需要将返回字符串放入函数

QString::fromLatin1(returned_string.c_str());

一切都会显示良好。