这几天遇到一个问题:
通过g++查询到的mysql中文数据输出是乱码,而通过g++添加到mysql中的中文数据也是乱码,但单独通过g++输出正常,查询通过mysql添加的中文数据显示也正常.
在网查查询了很久,纠结了半天也没有找到答案。后来通过在linux吧发帖终于找到了解决方案。原来是mysql和g++默认字符集不匹配产生的问题。通过在代码中添加
int mysql_set_character_set(MYSQL *mysql, char *csname)函数终于解决了问题。
源码如下:
#include<iostream>
#include <mysql/mysql.h>
#include<string>
using namespace std;
main()
{
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL_FIELD *fd;
const char *sql;
conn = mysql_init(NULL);
string aa= "使用的库名";
cout<<aa<<endl;
if (!mysql_real_connect(conn,"localhost" , "root", "123", "Supermarket", 0, NULL, 0))
{
cout<<"error !"<<endl;
return -1;
}
if (!mysql_set_character_set(conn, "utf8"))
{
cout<<"New client character set:"<<mysql_character_set_name(conn)<<endl;
}
else
{
cout<<"connected!!!"<<endl;
}
sql = "insert into T_goods values(‘777777‘,‘老坛酸菜面250g‘,‘成都康师傅有限责任公司‘,‘250g‘,4.5 , 3,10000,1) ";
int staus;
staus = mysql_query(conn,sql);
if(staus)
{
cout<<"no data"<<endl;
}
else cout<<"query success!"<<endl;
return 0;
}
数据库查询如下:
| 11117 | 茅台酒500ml | 贵州XX公司 | 500ml | 288 | 108 | 5000 | 1 |
| 11118 | 雪花啤酒 | 成都XX公司 | 250ml | 6 | 2.5 | 50000 | 1 |
| 11119 | 可口可乐125ml | 武汉XXX公司 | 125ml | 4.5 | 2 | 50000 | 1 |
| 2222222 | è€?å?›é…¸è?œé?¢250g | æˆ?都康师傅æ | 250g | 4.5 | 3 | 10000 | 1 |
| 33333333 | è€?å?›é…¸è?œé?¢250g | æˆ?都康师傅æ | 250g | 4.5 | 3 | 10000 | 1 |
| 44444 | è€?å?›é…¸è?œé?¢250g | æˆ?都康师傅æ | 250g | 4.5 | 3 | 10000 | 1 |
| 555555 | è€?å?›é…¸è?œé?¢250g | æˆ?都康师傅æ | 250g | 4.5 | 3 | 10000 | 1 |
| 6666666 | 老坛酸菜面250g | 成都康师傅有限责任公司 | 250g | 4.5 | 3 | 10000 | 1 |
| 777777 | 老坛酸菜面250g | 成都康师傅有限责任公司 | 250g | 4.5 | 3 | 10000 | 1 |
+----------+---------------------------------------+------------------------------------+---------+------------+-----------------+-------+----------+
17 rows in set (0.01 sec)
最后要感谢我爱麻省理工这位朋友!
http://tieba.baidu.com/p/4208832439?pid=80474409141&cid=0#80474409141