在Qt中使用sqlite出输入中文出现乱码问题的解决方法
在Qt中操作sqlite数据库的时候输入中文的时候容易出现乱码,而将数据库的类型换成mysql就不会出现类似的问题。可以使用以下的方法改写Qt中sqlite写法。
1.出现类似错误的语法
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("localhost"); //出现乱码
db.setDatabaseName("data.db");
db.setUserName("ohuohuoo");
db.setPassword("123456");
if (!db.open()) {
//若不能打开,则提示出错
QMessageBox::critical(0, "Cannot open database1",
"Unable to establish a database connection.", QMessageBox::Cancel);
return false;
}
将上面使用sqlite的语法改写一下
2.改写后的语句
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("my.db"); //使用正确
if (!db.open()) {
//若不能打开,则提示出错
QMessageBox::critical(0, "Cannot open database1",
"Unable to establish a database connection.", QMessageBox::Cancel);
return false;
}
3.其他解决方法
在查阅其他博文的时候,发现也有人提供了不一样的解决方法,就是将编码格式设置为UTF-8格式,但博主这里使用后没能成功解决问题,可能是我使用方法的原因,具体方法如下
//在main函数中,于创建调用数据库前添加
#include <QTextCodec>
//将编码格式设置为utf-8。必须在数据库调用和窗口页面显示前执行代码
QTextCodec * codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);