Qt5.8.0编译MySQL驱动注意事项
在使用MySQL5.7.14时,按照常规方法,使用Qt5.8.0重新编译MySQL驱动之后,在使用的时候发现读取的中文数据在使用toString()转换时,不能得到正确的结果。经查是Qt的MySQL的驱动代码上做了MySQL的版本判断,对不同的版本使用了不同的编码。解决方法如下:
打开Qt安装路径中的MySQL驱动相关路径,比如:
x:\Qt\Qt5.8.0\5.8\Src\qtbase\src\plugins\sqldrivers\mysql
打开其中的qslq_mysql.cpp,浏览到1423行左右。其内容如下:
#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007
if (mysql_get_client_version() >= 50503 && mysql_get_server_version(d->mysql) >= 50503) {
// force the communication to be utf8mb4 (only utf8mb4 supports 4-byte characters)
mysql_set_character_set(d->mysql, "utf8mb4");
} else {
// force the communication to be utf8
mysql_set_character_set(d->mysql, "utf8");
}
#endif
其中语句 mysql_set_character_set(d->mysql, “utf8mb4”); 更改了特定版本的MySQL使用的字符集。把utf8mb4改为utf8,即可正常读取、转换字符串。