• 12734阅读
  • 0回复

【原创】在QT中使用MySQL 4.1 C API [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-07-30
因为MYSQL 4.1的内部编码为Unicode,而QT的QString类型内部编码为Unicode,因此就产生了一些不便。这里找出了几个解决方法。
假设MySQL中的数据表类型是Utf8的。

MYSQL *conn = mysql_init(NULL);
conn = mysql_real_connect(conn, "localhost", "user", "password", "test", 0, NULL, 0);
mysql_query(conn, "SET NAMES utf8");
mysql_query(conn, "SELECT * FROM ssss");
MYSQL_RES *result = mysql_use_result(conn);
MYSQL_ROW row;
while (row = mysql_fetch_row(result))
{
  QString str = QString::fromUtf8(row[0]);
  listBox1->insertItem(str);
}
mysql_free_result(result);
QString sql = QString::fromLocal8Bit("INSERT INTO ssss VALUES('这也不行')");
lineEdit1->setText(sql);
mysql_query(conn, sql.utf8());
mysql_close(conn);


上面是一段代码。需要特别注意的是以下几点:
1,在每个连接开始都要进行"SET NAMES utf8"查询,(编码不同,应用不同的查询)
2,在查询出结果来后,要应用QString::fromUtf8()函数进行类型转换,这样QT程序才能进行正常显示
3,在GB码的源文件中,中文字符串要被QT程序正常处理的话,要进行类型转换QString::fromLocal8Bit()
4,在进行插入或更新查询的时候,要把字符串转换为utf8格式的(sql.utf8()),这样MYSQL内部才能正常显示中文数据。

总之,这里总共有三层转换:
一是要在源文件和QT程序正确显示中文之间的转换 QString sql = QString::fromLocal8Bit("INSERT INTO ssss VALUES('这也不行')");
二是要把查询出的结果要QT程序正确显示之间的转换QString str = QString::fromUtf8(row[0]);
三是要把查询认MYSQL正确处理显示的转换   mysql_query(conn, sql.utf8());


发表时间: 2005-05-10 13:27
[ 此贴被XChinux在2005-08-02 09:08重新编辑 ]
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个