之前的服务器上用的mysql-5.1.12一直使用latin1来存储,没有出现问题
新安装的mysql服务器使用utf8字符集,反倒无法存储中文了,特来求教。mysql版本:5.1.28
my.cnf里配置:
[mysql]
default-character-set = utf8
[mysqld]
default-character-set = utf8mysql环境下:
mysql> show variables like 'character_set%';
+--------------------------+----------------------------------------+
| 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/local/mysql/share/mysql/charsets/ | 
+--------------------------+----------------------------------------+mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | 
| collation_database   | utf8_general_ci | 
| collation_server     | utf8_general_ci | 
+----------------------+-----------------+    mysql连接后使用insert插入中文,select出来都为空;然后尝试在C程序中使用libmysqlclient库进行插入,插入中得到的结果是乱码;
尝试加入执行mysql_query(&m_connection, "set names utf8"), 唯一的变化就是之前的乱码变成另一种形式的乱码。
    不明白为啥utf8环境下中文都无法插入,搜索了很久也没找到解决办法,盼各位赐教

解决方案 »

  1.   

    我觉得是因为C程序用的字符串不是UTF8编码的
      

  2.   

    可是直接用mysql连接上去插入中文也不行;刚发现,如果先执行
    mysql>set names latin1;
    然后插入:
    mysql>insert into test values(1,'测试');
    再select出来是正常的中文但我的数据库是utf8的,我却无法再set nams utf8的情况下插入中文呢?在set names latin1下反倒是可以,我给弄晕了...
      

  3.   

    我用Mysql++ 接口也有此问题。  顶!!
      

  4.   

    这里已经给出了答案的线索在我的实践中,执行Mysql Server Instance Config Wizard设置中的选择默认字符集页面中选择Manual Selected Default Character Set/Collation,设定为GBK数据库的default character set gbk连接时SET NAMES 'GBK'再用mysql++操作就可以正常实现中文输入输出了。
      

  5.   

    楼上的只针对gbk吧?现在就是怎么用utf8的问题。
      

  6.   

    为了顺利的开发一个多语言的国际化J2EE程序,需要修改数据库字符集,我的做法如下: 安装 MySq时选择字符集为UTF-8 修改MySql安装目录下的my.ini中配置的默认编码: 
    该文件中有两处这样的配置:default-character-set=latin1 
    将这两处改成:default-character-set=utf8 新建数据库需指定字符集: 
    UTF8: CREATE DATABASE mmtye DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 在命令行查看字符集编码:show variables like '%char%'; 会看到如下信息: 
    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       | D:\MySQL\share\charsets\ 以上内容在重启MySql后也一直有效,无需每次启动数据库都要指定。 A、为了在命令行下能正确查看中文,命令行下执行: 
    set character_set_results=gbk; B、若需要在windows命令行执行insert、update,则执行: 
    set character_set_client=gbk; 
    A、B 两个命令重启数据库前有效,重启后就失效了。