方法1、QSqlDatabase对象设置UTF-8编码
QSqlDatabase db;
db.exec("SET NAMES 'UTF-8'");
方法2、将MySQL编码设置成UTF-8
show variables like 'character_set_%';
文章图片
各字段的含有如下:
文章图片
主要关注的是character_set_client、character_set_connection、character_set_results这三个变量。
他们的含义可以看以下例子:
首先client一般会发送一条sql给客户端,比如select * from table where name = ‘某某某’; ,在分析的过程中,我们主要对查询参数“某某某”进行分析。设置MySQL编码:
1、首先“某某某”三个字被client端进行编码为二进制流,传输给服务器。
2、服务器收到后,会认为客户端的编码为character_set_client对“某某某”进行解码,获取client发送的字符串sql。
3、解码之后,再把sql转换为character_set_connection格式,使得能与数据库连接的字符集相同。
4、解码成character_set_connection之后,就进行数据比对查询。此时如果要比对的列的字符集与character_set_connection不相等,那显然就是会有问题的。
5、数据查询出来之后,对结果要进行编码,编码的字符集就采用character_set_results字符集,此时如果客户端接收的字符集与character_set_connection不相同,那么客户端解码的数据也会出现问题。
set character_set_client=utf-8;
set character_set_connection=utf-8;
set character_set_database=utf-8;
set character_set_results=utf-8;
set character_set_server=utf-8;
set collation_database = utf8mb4_unicode_ci;
set collation_connection = utf8mb4_unicode_ci;
方法3、MySQL的my.ini文件或my.cnf设置UTF-8
在mysql数据库的安装根目录下找到my.ini,例:C:\ProgramData\MySQL\MySQL Server 8.0
# 在[mysql]下设置mysql客户端默认字符集
default-character-set=utf8
# 在[mysqld]下设置服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
然后重启MySQL服务。
方法4、头文件设置UTF-8
#pragma execution_character_set("utf-8")
【Qt|QT(C++)连接MySQL中文乱码解决】方法5、使用QString::fromLocal8Bit()
QString sql = QString::fromLocal8Bit("SELECT * FROM table");
推荐阅读
- 瀚高数据库内存结构
- TiDB数据库生成html格式的巡检报告
- springboot|springboot项目配置多数据库连接
- MySQL|MySQL——insert注意事项
- MySQL|IDEA连接mysql保姆级教学
- mysql|动态sql的标签语言
- javaWeb|Javaweb菜单信息管理的一级菜单和二级菜单显示
- mysql|mysql select语句详解_mysql select 语句实例详解
- mysql|mysql select语句详解_mysql学习笔记之完整的select语句用法实例详解