Linux编程向Mysql插入中文数据显示乱码的解决方法

最近写了个C++程序,其中有用到向Mysql中插入中文数据, 结果却出现乱码,经过上网查询资料和本人试验,终于解决了这个问题,现把方法说明如下:

首先说明Mysql中的字符集和校对规则。字符集是用来定义Mysql存储字符的方式,校对规则定义了字符串的比较方式。常用的字符集有GB2312(支持简体中文)、GBK(支持简体中文和繁体中文)、BIG5(支持繁体中文)、UTF8(基本上支持所有字符)。Mysql中主要涉及到以下几个字符集:服务器字符集、数据库、数据表、表中的的字段字符集、客户端字符集、连接字符集。

要处理中文,需要将character_server_set,character_client_server设置为utf8。方法如下:

在 [mysqld]中添加:

default_character_set=utf8

在[client]中添加:

default_character_set=utf8


重启mysqld服务:service mysqldrestart

进入mysql,查看字符集的情况,在命令行中输入命令:show variableslike ‘character_set_%’;

 

 好了,现在是解决中文乱码的关键步骤了。将Mysql以下三个系统参数设置为与服务器字符集character_set_server相同的字符集。

character_set_client:客户端的字符集

character_set_results:结果字符集

character_set_connection:连接字符集

设置这三个系统参数的命令:set names ‘utf8’

这三个系统参数的作用:

信息输入路径: client--connection--server (数据传送方向从左到右)

信息输出路径: server--connection--results (数据传送方向从左到右)

故这几个系统参数的值须相同,不然以不同的编码方式传送数据,若编码方式不兼容,则容易造成乱码的问题。

以下是用来测试的程序。(数据库名One,表名student,字段sno,sname)

#include<iostream>
#include<mysql/mysql.h>

using namespace std;

int main(void)
{
    MYSQL mysql;
    mysql_init(&mysql);
    if(!mysql_real_connect(&mysql, "192.168.199.117", "root", NULL, "One", 0, NULL, 0))
    {
        cout<<mysql_error(&mysql)<<endl;
    }
    if(mysql_query(&mysql, "set names \'utf8\'"))  //这个是关键
    {
        cout<<mysql_error(&mysql)<<endl;
    }
    char query[1024] = {0};
    sprintf(query, "update student set sname = \'优酷视频-大话西游\' where sno = 1000");
    cout<<query<<endl;
    if(mysql_query(&mysql, query))
    {
        cout<<mysql_error(&mysql)<<endl;
    }
    mysql_close(&mysql);
    return 0;
}

运行结果

 若对已存在的数据库进行中文插入,除了上述步骤外,还需要修改数据库、表中字段(要插入中文的字段)的字符集。修改方式参考网上资料,这里不再详述。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值