【问题标题】:c++ store special characters ("ç", "á",..etc) on SQLite dbc++ 在 SQLite db 上存储特殊字符(“ç”、“á”、..etc)
【发布时间】: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


【解决方案1】:

虽然当您尝试存储“ç”或“á”之类的内容时,它似乎是错误的字符,但这些字符“没问题”。如果我创建一个函数 (SELECT) 将列文本返回到字符串,它就可以工作。如果你像我一样使用 QT,你只需要将返回字符串放在一个函数中

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

一切都会正常显示。

【讨论】:

    猜你喜欢
    • 2011-02-15
    • 2015-02-14
    • 2021-06-29
    • 2021-05-03
    • 1970-01-01
    • 2016-04-23
    • 2010-10-16
    • 2012-04-24
    • 2015-05-16
    相关资源
    最近更新 更多