嵌入式 linux下mysql支持中文的方案

代码:

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'

即可.

嵌入式 linux下mysql支持中文的方案_第1张图片

在使用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; 

嵌入式 linux下mysql支持中文的方案_第2张图片

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

 

你可能感兴趣的:(嵌入式 linux下mysql支持中文的方案)