C/C++ 向mysql数据库读取、写入中文的解决方法

来源:互联网 发布:腾讯云的cdn地域名 编辑:程序博客网 时间:2024/06/06 07:50

1.首先需要设置mysql服务器的字符集;

一般默认情况下是默认为latinl,你可以手动修改;

这里提供一劳永逸的方法,直接修改配置文件my.ini或者是my.conf,把[mysql]与[mysqld]下的default-character-set=latinl修改为:

default-character-set=utf8;

或者你可以每次都到mysql命令行去设定下;

这里要讲下几个相关的字符集设置项:

character_set_results=utf8; //这个是用来设置查询返回结果的字符集

character_set_client=utf8; //设置客户端的字符集

character_set_connection=utf8; //设置连接的字符集

还有其他几个最好也设置成utf8吧。

显示MYSQL字符集编码 :show variables like 'character%';  

类似下面:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

查看表新建时的字符集:show create table xxxx

查看数据库新建时的字符集:show create database xxxx

更改表的默认字符集: alter table xxxx charset=utf8

更改数据库的默认字符集:alter database xxx charset=utf8


2.当上面都已设置好以后,基本也就可以了,大家都这么说,其实不然;

在C/C++使用API连接到mysql数据库时,需要在连接后设置字符集,调用API函数mysql_set_character_set(&m_mysql, "utf8");

到这里,你可以试下是不是能够插入中文了,还是说当有中文的时候就插不进去,没有中文就可以插进去,如果你成功了,那就不用往下看了;

如果没有就看下一步;


3.代码中的字符集转换;

首先把VC++中的sql语句从gb2312转为utf8,然后再执行,应该就可以了;

这里推荐用libiconv库进行字符集转换。


为什么还要第三步呢?我觉得是客户端传入的字符串的字符集与mysql设置的字符集不匹配,所以就出问题了;

其实在第二步的时候吧utf8改成gb2312也就可以实现了,我觉得这个时候存储是utf8格式,但是传输与显示是gb2312,这里只是我的个人见解;

望大家指正。

原创粉丝点击