【发布时间】:2015-05-18 18:19:07
【问题描述】:
我的程序使用 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() 参数上收到的查询是正确的,并且所有特殊字符都是正确的。
【问题讨论】:
-
如果你使用Qt,你不是在使用Qt的数据库系统吗?
-
请注意,在 Windows shell 中运行
sqlite3时,不支持 UTF-8 字符;切勿使用它来输入或输出非 ASCII 数据。要检查您的数据库是否包含正确的数据,请使用任何其他 SQLite 工具。 -
@CL。 SQLiteStudio 它是我用来检查我的数据的工具,正如我所说,它让我可以插入我想要的内容以及我想要的方式。但我真正需要的是用我的程序插入数据
-
就像@ahmed 所说,让Qt 为您处理这个问题:doc.qt.io/qt-5/qsqldatabase.html
-
你的源代码的编码是什么?
标签: c++ qt visual-studio-2012 sqlite