在命令行中插入汉字没有问题,而在调用Mysql_query时如果插入的是汉字则Mysql返回错误。
这显然是字符集设置问题 。可以通过设置GB2312 来解决。mysql_set_character_set(mysql,"gb2312");
下面是具体的实例代码。
/在vc下操作MYSQL中文数据的参考程序
#include <windows.h>
#include <iostream>
#include <mysql.h>
#include <stdio.h>
#include <string.h>
using namespace std;
int connDB();
int create_table();
int insert_table();
int select_table();
int disconnDB();
MYSQL *mysql;
MYSQL_RES *res;
MYSQL_FIELD * fd;
MYSQL_ROW row;
char szSqlText[500]="";
int i;
int main()
{
connDB();
// create_table();
insert_table();
select_table();
disconnDB();
return 0;
}
///子函数
int connDB()//连接数据库
{
char *host = "localhost";
char *user = "root";
char *pass = "123";
char *db = "jj";
mysql = mysql_init((MYSQL*) 0);
mysql_real_connect( mysql, host, user, pass, db, 0, NULL, 0 ) ;
mysql_set_character_set(mysql,"gb2312");
cout<<"conn OK!"<<endl;
return 0;
}
int disconnDB()//关闭数据库
{
mysql_close( mysql ) ;
cout<<"disconn OK!"<<endl;
return 0 ;
}
int create_table()
{
mysql_set_character_set(mysql,"gb2312");
sprintf(szSqlText, //构造SQL语句
"create table mytable"
//新建一张表
"(s0 varchar(100), s1 char(6), "
"s2 varchar(4), s3 varchar(6), s4 int)");
mysql_query( mysql, szSqlText);
cout<<"create OK!"<<endl;
return 0;
}
int insert_table()
{
string s1="insert into mytable values(\'";
//向表中插入数据
string s2="2000-3-10 21:01:30";
//注意时间的格式
string ss="\',\'";
string s3="Test";
string s4="可进口的";
string s5="可124";
string s6="\',";
sprintf(s6,"%d",2500);
string s;
s=s1+s2+ss+s3+ss+s4+ss+;
mysql_set_character_set(mysql,"gb2312");
sprintf(szSqlText,"s%",s);
if(!mysql_query( mysql, szSqlText))