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

来源:互联网 发布:淘宝司法拍卖房产平台 编辑:程序博客网 时间:2024/05/20 03:37

   声明:本文适用于  在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;}}