在windows中,通过Qt访问MySql数据库时,一旦有中文,都会出现这样那样的问题。而这些问题一般都是由于编码格式造成的,所以要通过各种方式同步好qt和mysql的编码格式。
直接用mysql的SDK的话,可以参考这个https://blog.youkuaiyun.com/qq_34867559/article/details/78567483
但是用的是 QSqlDatabase的话,就要按照下面这样子来操作了:
首先qt这边的头文件(或者cpp文件)记得加上这一句
#pragma execution_character_set("utf-8")
然后就可以在代码中设置连接时的编码格式了。
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL3");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("sys"); //这里先连接一个系统的英文名数据库,以建立起和mysql的连接,这个数据库作为我们的垫脚石
db.setUserName("root");
db.setPassword("123456"); //这里输入你的密码
if (!db.open())
{
qDebug() << "create database fail:" << db.lastError();
}
else
{
// db.setConnectOptions("character_set_connection=utf8"); // use an SSL connection to the server,不知道为啥,这个好像没用。不过也可以试试,也许你们可以
// qDebug() << "set options:" << db.connectOptions() << db.lastError();
db.exec("set names 'utf8'"); //前面要连接好数据库才能进行这个操作,设置编码格式
QSqlQuery query = db.exec("use 我的中文名数据库"); //这个时候就可以连接(切换)中文的数据库了
// QSqlQuery query = db.exec("CREATE SCHEMA `我的中文名数据库`");
qDebug() << db.lastError();
}
另外,在MySql中,在执行sql语句时,凡是一些特殊字符(数字开头等)的表格名、列名称等,假如直接写,可能会报语法错误。这个时候可以用··将其包起来。