再谈 mysql中文乱码

来源:互联网 发布:网络推手平台 编辑:程序博客网 时间:2024/04/30 04:39

  上一篇,转载的mysql中文乱码问题,给了我们很多解决中文乱码的提示,步骤。

可是按照上述配置,一直都没有解决我的程序中往数据库中插入中文乱码的问题。

然后我又继续搜索,摸索,提问,终于,不再有乱码了。现在,我自己来总结一下中文乱码问题。


说明:我使用的是windows 64位操作系统+visual studio 2010 + mysql5.5 + OTL

出现乱码,首先,我们的查看mysql数据库的客户端,服务端,连接层,数据库,表,字段的编码格式。

使用show variables like 'char%',查看客户端,服务端,连接层等的编码。

mysql> show variables like 'char%';
+--------------------------+---------
-----------+
| Variable_name            | Value
           |
+--------------------------+---------
-----------+
| character_set_client     | gbk
           |
| character_set_connection | gbk
           |
| character_set_database   | utf8
           |
| character_set_filesystem | binary
           |
| character_set_results    | gbk   //这个是结果集的显示
           |
| character_set_server     | utf8
           |
| character_set_system     | utf8


还查看一下collation的字符集:

show varibles like 'coll%'

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci  |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

查看数据表所指定的字符集:

show create table 表名;

| student | CREATE TABLE `student` (

  `no` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `sex` varchar(2) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  UNIQUE KEY `no_UNIQUE` (`no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |


查看字段的字符集:

show full columns from 表名

| no    | int(11)     | NULL            | YES  | UNI | NULL    |       | select,
insert,update,references |         |
| name  | varchar(20) | utf8_general_ci | YES  |     | NULL    |       | select,
insert,update,references |         |
| sex   | varchar(2)  | utf8_general_ci | YES  |     | NULL    |       | select,
insert,update,references |         |
| age   | int(11)     | NULL            | YES  |     | NULL    |       | select,
insert,update,references |         |


从网上查了许多,保证所有的字符集编码一致就不会有乱码。然后我就真的把所有的编码都设置成一样了。在连接的时候也指定了utf8编码。

可是依旧乱码。我都快疯了。我甚至用了转码。可能是使用的操作系统和mysql不同的缘故。一直都觉得utf8挺强大的,什么都能支持。

乱码呀乱码,于是我尝试着换其他编码,尝试着设置不同的编码。终于不再编码了。

我的配置就向上面你们所看到的,并不是每种的编码都一致的。开始我的配置全是utf8编码。

后面我使用命令修改了客户端以及连接层的字符集编码 set names gbk.把如下三个都改成gbk。

 character_set_client  
 character_set_connection 
 character_set_results

相当 set  character_set_client   gbk

  set  character_set_connection  gbk

         set  character_set_results    gbk

在指定连接的时候,也指定为gbk。

char *constr = "Driver={MYSQL ODBC 5.1 Driver};Server=localhost; Database=testdb;Uid=root;Pwd=123qwe!;CharSet=gbk";

如果你是使用ODBC配置,则记得ODBC配置时,点击detail,里面的第二个选项卡指定字符集为gbk。

这样 ,你再在你的程序中往mysql中插入中文,不会再有乱码了,O(∩_∩)O哈哈~

其实这里的配置和操作系统是有关系的。所以大家配置的时候不要全部按照网上的来。还需根据自己的操作系统,环境做些许的变化。

知道上面的那些字符集,查看修改命令,再根据自己的需求设定。

还提供一些供大家参考的消息:

客户端,服务端的字符集编码都是在my.ini文件中配置的


[mysql]
default-character-set=gbk


[mysqld]

这个下面有

character-set-server=utf8


修改字段的字符集

alter table student modify name varchar(20) character set utf8; 


原创粉丝点击