代码:
int joseph_db_query(void *db_con,unsigned char *cmd)
{
int res;
int ret = 0;
MYSQL *conn_ptr = NULL;
MYSQL_DB_JOSEPH *db = db_con;
conn_ptr =(MYSQL *) db->conn_ptr;
db_lock();
res = mysql_query(conn_ptr, "set names utf8");
if(0 == res) {
res = mysql_query(conn_ptr, cmd);
}
if (res) {
jrm_db_reinite();
db =(MYSQL_DB_JOSEPH *)get_jrm_db_ptr();
conn_ptr = (MYSQL *) db->conn_ptr;
res = mysql_query(conn_ptr, cmd);
printf("command:[%s]:[%s]\n",cmd,mysql_error(conn_ptr));
} else {
printf("command:%s\n",cmd);
}
db_unlock();
return res;
}
int jrm_create_database_jrm(void *in)
{
MYSQL_DB_JOSEPH *db = in;
int res = 0;
MYSQL_RES *res_ptr;
char value = 1;
char cmd[1024] = {0};
db->conn_ptr = mysql_real_connect(db->conn_ptr, db->db_host,\
db->db_user, db->db_pass, 0, 0, NULL, 0);
mysql_options(db->conn_ptr, MYSQL_OPT_RECONNECT, (char *)&value);
sprintf(cmd, "%s %s %s","create database ", db->db_name, "character set 'utf8' collate 'utf8_general_ci'");
res = joseph_db_query(db, cmd);
if(res != 0) {
printf("db_name %s is not existence \n", db->db_name);
printf("%s\n", cmd);
return -1;
}
res = joseph_db_query(db,"set global character_set_client = utf8");
res = joseph_db_query(db,"set global character_set_connection = utf8");
res = joseph_db_query(db,"set global character_set_database = utf8");
res = joseph_db_query(db,"set global character_set_results = utf8");
res = joseph_db_query(db,"set global character_set_server = utf8");
res = joseph_db_query(db,"set global character_set_system = utf8");
res = joseph_db_query(db,"set global collation_connection = utf8_general_ci");
res = joseph_db_query(db,"set global collation_database = utf8_general_ci");
res = joseph_db_query(db,"set global collation_server = utf8_general_ci");
res = joseph_db_query(db,"set names utf8");
}
设置mysql支持中文
前几天玩了一下mysql(安装包为mysql-essential-5.1.57-win32.zip),并用HeidiSQL_6.0做为客户端工具。我的mysql是以utf8做为默认字符集,INNODB做为默认引擎,测试发现发现:HeidiSQL对中文支持非常完美,但是mysql自带的“MySQL Command Line Client”却不是很好,需要设置才能支持中文。
“MySQL Command Line Client”中输入
mysql>set names 'gb2312'
即可.

在使用MySQL C API开发程序时,在开始执行查询之前(注:conn类型是MYSQL* ),先运行mysql_set_character_set(conn, "gb2312"),也可以解决查询结果中的中文显示乱码问题 ;但是如果mysql_query调用的查询字符串中用中文字符时,就要指定字符集,如:
#include <winsock2.h>
#include <mysql.h>
int main(int argc,char* argv[])
{
MYSQL* conn=mysql_init(NULL);
mysql_real_connect(conn,"localhost", "root", "a", "sqltest", 3306, NULL, 0);
mysql_set_character_set(conn, "gb2312") ;
mysql_query(conn,"select * from mlib where info like _utf8'%兔年%';");//关键在_utf8
//...一些MySQL查询结果处理语句
mysql_close(conn);
return 0;
}

PS: MySQL5.1对UTF8的支持很好,对中文字符集gb2312也能完美支持——只要配置得当!而且MySQL5.1支持中文全文检索哦!!!