最近写了个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
#include
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<
运行结果
若对已存在的数据库进行中文插入,除了上述步骤外,还需要修改数据库、表中字段(要插入中文的字段)的字符集。修改方式参考网上资料,这里不再详述。