现在的位置: 首页 > 综合 > 正文

C语言连接MySQL中文问题

2013年06月11日 ⁄ 综合 ⁄ 共 2112字 ⁄ 字号 评论关闭

在学习<Linux程序设计>第8章MySQL数据库8.3节:
使用C语言访问MySQL访问数据库时尝试把SQL数据换成了中文,但是在运行示例程序时终端输出却乱码,MySQL C 语言连接默认字符集是latin1
查了下API找到如下函数可解决中文乱码问题。

int
mysql_set_character_set(
MYSQL *
mysql,
char
*
csname)

描述
该函数用于为当前连接设置默认的字符集。字符串csname指定了1个有效的字符集名称。连接校对成为字符集的默认校对。该函数的工作方式与SET NAMES语句类似,但它还能设置mysql-
>
charset的值,从而影响了由mysql_real_escape_string(
)
设置的字符集。
该函数是在MySQL 5.
0.
7中增加的。
返回值
0表示成功,非0值表示出现错误。

示例:

#
include
<
stdlib.
h>

#
include
<
stdio.
h>

#
include
"mysql.h"

MYSQL my_connection;

MYSQL_RES *
res_ptr;

MYSQL_ROW sqlrow;

void
display_row(
)
;

int
main(
int
argc,
char
*
argv[
]
)

{

    int
res;

    mysql_init(
&
my_connection)
;

    if
(
mysql_real_connect(
&
my_connection,
"localhost"
,
"rick"
,

             "secret"
,
"foo"
,
0,
NULL
,
0)
)
{

        /* 设置数据库默认字符集 */

        if
(
mysql_set_character_set(
&
my_connection,
"utf8"
)
)
{

            fprintf
(
stderr
,
"错误, %s/n"
,
mysql_error(
&
my_connection)
)
;

        }

        res =
mysql_query(
&
my_connection,

                "SELECT childno, fname, age FROM children WHERE age > 5"
)
;

        if
(
res)
{

            fprintf
(
stderr
,
"SELECT error: %s/n"
,

                    mysql_error(
&
my_connection)
)
;

        }
else
{

            res_ptr =
mysql_use_result(
&
my_connection)
;

            if
(
res_ptr)
{

                while
(
(
sqlrow =
mysql_fetch_row(
res_ptr)
)
)
{

                    display_row(
)
;

                }

                if
(
mysql_errno(
&
my_connection)
)
{

                    fprintf
(
stderr
,
"Retrive error: %s/n"
,

                            mysql_error(
&
my_connection)
)
;

                }
    
                mysql_free_result(
res_ptr)
;

            }

        }

        mysql_close(
&
my_connection)
;

    }
else
{

        fprintf
(
stderr
,
"Connection failed/n"
)
;

        if
(
mysql_errno(
&
my_connection)
)
{

            fprintf
(
stderr
,
"Connection error %d: %s/n"
,

                    mysql_errno(
&
my_connection)
,

                    mysql_error(
&
my_connection)
)
;

        }

    }

    return
EXIT_SUCCESS
;

}

void
display_row(
)

{

    unsigned
int
field_count;

    field_count =
0;

    while
(
field_count <
mysql_field_count(
&
my_connection)
)
{

    if
(
sqlrow[
field_count]
)

     printf
(
"%s "
,
sqlrow[
field_count]
)
;

    else

     printf
(
"NULL"
)
;

    field_count+
+
;

    }

    printf
(
"/n"
)
;

}

输出结果:




抱歉!评论已关闭.