问题也描述不清楚,请看几行代码结其运行结果,代码很简单,红色部分是有区别的地方,请高人解答一下,谢谢。主要问题是想解决QT连接MYSQL后能使用中文
解决方法见7楼
测试1:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("SchoolDB");
db.setUserName("root");
db.setPassword("123456");
qDebug()<<"db open=" <<db.open();
db.exec("SET NAMES 'utf8'");
QSqlQuery query(db);
qDebug()<<"drop=" <<query.exec("DROP TABLE student"); //删除现存的student表
qDebug()<<"create=" <<query.exec("CREATE TABLE student(name varchar(20),id int)"); //建立表student
qDebug()<<"insert=" <<query.exec("INSERT INTO student(name,id) VALUES('张三',34)"); //插入数据
qDebug()<<"select=" <<query.exec("SELECT * FROM student"); //以下几行是显示表中所有数据
while(query.next()){
QString name = query.value(0).toString();
int id=query.value(1).toInt();
qDebug()<<"name="<<name<<",id="<<id;
}
db.close();
结果:
db open= true
drop= true
create= true
insert= false //有最前面三行代码及插入语句中有中文就插入失败,可以比较测试1与测试2,也可对比测试1与测试3
select= true
测试2:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("SchoolDB");
db.setUserName("root");
db.setPassword("123456");
qDebug()<<"db open=" <<db.open();
db.exec("SET NAMES 'utf8'");
QSqlQuery query(db);
qDebug()<<"drop=" <<query.exec("DROP TABLE student");
qDebug()<<"create=" <<query.exec("CREATE TABLE student(name varchar(20),id int)");
qDebug()<<"insert=" <<query.exec("INSERT INTO student(name,id) VALUES('zhangshan',34)");
qDebug()<<"select=" <<query.exec("SELECT * FROM student");
while(query.next()){
QString name = query.value(0).toString();
int id=query.value(1).toInt();
qDebug()<<"name="<<name<<",id="<<id;
}
db.close();
结果: //对比测试1与测试2
db open= true
drop= true
create= true
insert= true
select= true
name= "zhangshan" ,id= 34
测试3:
//QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
// QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
//QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("SchoolDB");
db.setUserName("root");
db.setPassword("123456");
qDebug()<<"db open=" <<db.open();
db.exec("SET NAMES 'utf8'");
QSqlQuery query(db);
qDebug()<<"drop=" <<query.exec("DROP TABLE student");
qDebug()<<"create=" <<query.exec("CREATE TABLE student(name varchar(20),id int)");
qDebug()<<"insert=" <<query.exec("INSERT INTO student(name,id) VALUES('张三',34)");
qDebug()<<"select=" <<query.exec("SELECT * FROM student");
while(query.next()){
QString name = query.value(0).toString();
int id=query.value(1).toInt();
qDebug()<<"name="<<name<<",id="<<id;
}
db.close();
结果: //对比测试1与测试3
db open= true
drop= true
create= true
insert= true
select= true name= "??èy" ,id= 34 //中文乱码