栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

QT(C++)连接MySQL中文乱码解决

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

QT(C++)连接MySQL中文乱码解决

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 = ‘某某某’;,在分析的过程中,我们主要对查询参数“某某某”进行分析。
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:ProgramDataMySQLMySQL 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")

5、使用QString::fromLocal8Bit()

QString sql = QString::fromLocal8Bit("SELECt * FROM table");
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862476.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号