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的程序就好了