c++ 在 SQLite 数据库上存储特殊字符(“ç”、“á”、..等)

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

我的程序使用 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() 参数上接收到的查询是正确的,并且所有特殊字符都是正确的。

虽然当您尝试存储诸如“ç”或“á”之类的内容时似乎是错误的字符,但这些字符是 "fine"。如果我将函数 (SELECT) return 列文本转换为字符串,它就可以工作。如果你像我一样使用 QT,你只需要将 return 字符串放在函数中

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

一切都会正常显示。