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,这里只是我的个人见解;
望大家指正。