最近写一个小项目。需要用到mysql数据库。
但是字符集问题一直困扰。。
差了许多资料以后明白了很多。但是有个问题还是没弄清楚。mysql字符集的乱码大约是因为数据库编码、连接编码、和客户端编码3个不统一造成的。
第一个问题是连接编码是负责什么工作的?
进行转码么?第二个问题。和上个问题差不多。
我现在又一个utf-8的数据库。
然后我在cmd下。直接查询是乱码。插入会报错。
大约是因为cmd的默认编码为gbk。
解决方案是连接的时候设置连接字符集。
mysql-uroot -proot --default-character-set=gbk
这样查询和插入都正常了。但是我想知道我插入的数据时什么编码的?
是不是以gbk插入然后以gbk解析所以没有乱码。
第三个问题。gbk和utf-8是否存在包含关系?或者说是否不需要转码。?

解决方案 »

  1.   

    第一个问题是连接编码是负责什么工作的?
    进行转码么?是的,可以这么理解。
    但是我想知道我插入的数据时什么编码的?
    是不是以gbk插入然后以gbk解析所以没有乱码。不是,以字段上的字符集设置存储,但如你第一个问题,MYSQL会进行不同字符集间的转换
    第三个问题。gbk和utf-8是否存在包含关系?或者说是否不需要转码。?
    不是包含,是不同的两种字符集编码方案。 需要转码。
      

  2.   

    客户端 字符集设置 , 你的客户端使用的是什么字符集,有些情况你是没的选的。比如WINDOWS下的DOS无法正常支持UTF8.连接中的字符集设置, 同样,在某些情况下,连接中的字符集也会受到限制,当然现在这种情况不多。基本上都是用TCP通讯了。字段的 字符集,这个是实际存储在表中的字符集。 (注意不存在什么 数据库本身的字符集。)
      

  3.   


    我想问的问题是。
    连接字符集所起的作用大约流程;
    我想象中的流程是。查询时读出要查询的数据。然后经过连接的时候根据连接的字符集进行转码。然后显示在客户端。
    插入的时候是不是也把要插入的语句转化成连接的编码。然后插入数据库中。

    例如utf-8的字段(谢谢纠正)和gbk的cmd命令行
    正常查询会是乱码。设置了连接字符集为gbk以后正常
    所以
    我查询的时候把utf-8的字段数据经过连接设置的gbk编码以后。转换成gbk编码显示在cmd的界面中。但是我插入的时候为什么不是gbk的数据。经过连接设置的gbk编码以后以gbk编码的格式插入进去。
    所以设置连接编码是不是仅仅针对客户端起作用的。而不是双向的?
      

  4.   


    当我有一个包含中文sql语句 比如select * from tbl_news where title like '%中文%'
    在cmd下(gbk)编码。并且设置了连接编码为gbk的情况下。当sql语句到数据库时候,sql语句应是character_set_connection的字符集gbk了吧?那么查询怎么能查询的出来呢?
      

  5.   

    看完下面的解释然后看看手册中的字符集介绍。http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码