红联Linux门户
Linux帮助

MySQL不支持中文,C语言从数据库中读取出来的中文显示???

发布时间:2016-07-13 10:04:34来源:linux网站作者:ZHAOs
声明:本文适用于在Linux(也许仅限于Ubuntu)中,使用C语言读取MySQL中存储的数据时显示的中文都是???的情况。
不是为了说一个简单的“Mysql不支持中文”(即用的仅仅是Mysql本身,自始至终不用离开mysql的终端的 (mysql > ),比如不是用编程语言从数据库里读东西)。而且这种所谓的不支持中文也很容易解决,我所知道的最简单的方法就是不用varchar 而使用nvarchar即可插入输出中文都没问题。
 
MySQL不支持中文可不是个稀罕问题,我遇到了这个问题之后赶紧去网上查,结果无数哥们们的技术文章都告诉我要:
先root打开my.cnf文件,然后修改里面的设置,比如 [mysql]里面的, [mysqld]里面的, [mysql-safe]里面的,[client]里面的或者 [server]  里面的内容等等,基本上无非是加上一句 set_default_charcter=utf8 之类。然后再重启mysql服务等等。我试了这个试那个,结果事实告诉我要不然用C语言在终端里面读出来的依旧是问号,1要不然就是再也无法启动mysql服务,报错说 什么什么.sock 之类的错误。
 
以上为背景,以免误导他人。
为解决我面临的这种问题,要加上一行代码就可以解决这个问题了。
 
下面是我的实例代码:
#include<stdio.h>  
#include<mysql/mysql.h>  
#include<assert.h>  
int main(){  
MYSQL* mysql;  
mysql=mysql_init(NULL);  
mysql=mysql_real_connect(mysql,"localhost","root","123","mydatabase",0,NULL,0);  
//其实你需要的就是这行下面的部分  
int utf8;  
utf8=mysql_query(mysql,"set character_set_results=utf8");  
printf("utf8=%d\n",utf8);  
assert(utf8==0);  //其实你需要的就是这行上面的部分 然后你就什么都会了,这四行代码以上和以下的代码几乎都是没有意义的,因为这不是个问题  
MYSQL_RES* result;  
MYSQL_ROW row;  
int ret;  
ret=mysql_query(mysql,"select * from zhaos");  
assert(ret==0);  
printf("select finished\n");  
result=mysql_store_result(mysql);  
int num;  
num=mysql_num_rows(result);  
printf("ROWS= %d\n",num);  
while((row=mysql_fetch_row(result))!=NULL){  
printf("%s\n",row[0]?row[0]:"NULL");  
mysql_free_result(result);  
mysql_close(mysql);  
return 0;  
}  
}
 
本文永久更新地址:http://www.linuxdiyf.com/linux/22326.html