Qt MSVC MySQL中文乱码的问题

Qt MSVC MySQL中文乱码的问题

1.修改my.ini文件

my.ini文件中,我的电脑在C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
[mysql]标签下加上:
default-character-set=utf8
[mysqld]标签下加上:
character-set-server=utf8
[client]标签下加上:
default-character-set=utf8

2.再重启MySQL服务

这个方式很多,不多描述了

3.MySQL 5.7 Command Line Client中解决方式

1.登录进去mysql;
2尝试在一个表中写入一行数据,如果的报错\xE7\x8E\x8B\xE6\x9E\x97
show full fields from (这里是表名);查看Collation下对应的字段;
在这里插入图片描述
3.把latinl_swedish_ci改成gbk;
alter table (表名) change (字段) (字段) (字段类型) character set gbk;
我这里输入了:alter table course change name name varchar(20) character set gbk;
再show full fields from course;查看
请添加图片描述

再把下面的一行teacher也改了。再插入一行看看,
输入:insert into course values(3, “历史”, “王老师”);
可以了。

4.MSVC Qt 连接MySQL的中文乱码解决方式

先MySQL 5.7 Command Line Client中输入drop table course;删除了这个 表
再执行Qt的以下代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setDatabaseName("asssys");       //这里输入你的数据库名
    db.setUserName("root");
    db.setPassword("root");   //这里输入你的密码
    if (!db.open()) {
        QMessageBox::critical(0, QObject::tr(u8"无法打开数据库"),
        u8"无法创建数据库连接! ", QMessageBox::Cancel);
        qDebug() << db.lastError().text();
        return false;
    }

    // 如果 MySQL 数据库中已经存在同名的表, 那么下面的代码不会执行
    QSqlQuery query(db);

    // 使数据库支持中文
    //query.exec("SET NAMES 'latin1' ");//这里一行设置是没有用的

    // 创建 course 表
    query.exec("create table course (id int primary key, "
    "name varchar(20), teacher varchar(20))");

    //刚在窗口里执行的这两行
    query.exec("alter table course change name name varchar(20) character set gbk;");
    query.exec("alter table course change teacher  teacher varchar(20) character set gbk;");
    //窗口中的set命令
    //query.exec("set character_set_connection=utf8");

    query.exec("insert into course values(0, 'math', 'liu')");
    query.exec("insert into course values(1, 'chinese', 'zhang')");
    query.exec("insert into course values(2, '计算机', '李老师')");
    query.exec("insert into course values(3, '历史', '王老师')");
return true;

写了四行结果只有两行英文的在,中文的没写进去:
请添加图片描述
因为MSVC的字符串编码格式还要设置,我这里加上u8就好了,有的可能要QString::fromLoacal8Bit(“”); QStringLiteral(“”);QString::fromWcCharArray(L””);先测试qDebug()能不能输出出来

query.exec(u8"insert into course values(0, 'math', 'liu')");
query.exec(u8"insert into course values(1, 'chinese', 'zhang')");
query.exec(u8"insert into course values(2, '计算机', '李老师')");
query.exec(u8"insert into course values(3, '历史', '王老师')");

Drop table course; 删除这个表再执行一遍Qt的程序就好了

4.参照

https://blog.csdn.net/tzh476/article/details/52644271

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄猿欲度愁攀援

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值