您的位置:首页 > 编程语言 > C语言/C++

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

2013-01-13 10:19 441 查看
声明:本文适用于 在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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: