我的MySQL数据库用的是清一色的utf8,见表语句如下,存储引擎MyISAM,但是我把该表的三个相关文件拷贝给一个朋友,他的数据库安装时选得时GBK(没改过)。在他那里中文可以正常显示,按照我的想法是,我的数据表用的是utf8,他用GBK读出来应该是乱码。为什么没有乱码。而且在他那里查看该表的信息依然是utf8的。求解释。mysql> show create table ip \G
*************************** 1. row ***************************
       Table: ip
Create Table: CREATE TABLE `ip` (
  `start` bigint(21) unsigned DEFAULT NULL,
  `end` bigint(21) unsigned DEFAULT NULL,
  `location` varchar(100) DEFAULT NULL,
  `organization` varchar(100) DEFAULT NULL,
  UNIQUE KEY `ip_start_index` (`start`),
  UNIQUE KEY `ip_end_index` (`end`),
  KEY `ip_start_end_index` (`start`,`end`),
  FULLTEXT KEY `ip_location_index` (`location`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)mysql> show variables like "%char%";
+--------------------------+------------------------------+
| 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       | D:\MyInstall\share\charsets\ |
+--------------------------+------------------------------+
8 rows in set (0.00 sec)

解决方案 »

  1.   

    set names 'gbk';http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  2.   

    这句话在MSSQL可能成立, 在MYSQL不成立
    MYSQL的字符集有分服务端、客户端,它会自动进行转换
    你只要设对了客户端的字符集,比如你的应用是在GBK下,你就设客户端为GBK
    SET NAMES gbk;
    它就会把UTF8码自动转换为GBK显示出来
      

  3.   

    对不起,没看清你的题目。
    以上解释作废在你拷表给他的时候,如果这个表的字符集是UTF8,拷到那边字符集不会变化,即使设定的默认字符集为GBK。
    MYSQL允许不同的表,不同的字符集
      

  4.   

    建表语句中已经带有字符集设置了,当然就指定了 utf8 了,而客户端会根据系统设置、客户端设置及服务器端设置的字符集进行显示,如果碰巧也是用 utf8 显示那就显示正确了。我使用的 Navicat 客户端默认会使用服务器端的配置,这个表指定 utf8,所以客户端也会使用同样的字符集显示。其它客户端也应该有差不多的功能吧。
      

  5.   

    哦  首先谢谢你,这件事儿我是知道的。但是我想是不是MySQL是这样做的,我的表是utf8的,所以MySQL服务器端就按照utf8读出来,而返回的结果集用gbk编码,之后在客户端显示的时候用gbk解码,所以我的朋友那里显示是正常的中文汉字。而在我这里呢,读取的时候用的是utf8,返回的结果集用的是utf8,而dos窗口下用gbk解码,自然就出现了乱码。
      

  6.   

    不晓得你要说什么,但是请你帮忙想想是不是这么回事儿。
    MySQL是这样做的,我的表是utf8的,所以MySQL服务器端就按照utf8读出来,而返回的结果集用gbk编码,之后在客户端显示的时候用gbk解码,所以我的朋友那里显示是正常的中文汉字。而在我这里呢,读取的时候用的是utf8,返回的结果集用utf8编码,而dos窗口下用gbk解码,自然就出现了乱码。
      

  7.   

    没明白你在说什么,但是也请你帮忙想想是不是这么一回事儿。
    MySQL是不是这样做的,我的表是utf8的,所以MySQL服务器端就按照utf8读出来,而返回的结果集用gbk编码,之后在客户端显示的时候用gbk解码,所以我的朋友那里显示是正常的中文汉字。而在我这里呢,读取的时候用的是utf8,返回的结果集用utf8编码,而dos窗口下用gbk解码,自然就出现了乱码。
      

  8.   

    在你的建表语句里,指定了字符集 CHARSET=utf8。所以不会乱码。比如,你一个word文件,里面写了写文字。从中文系统拷贝到日文希望,也不会乱码。
      

  9.   


    MySQL是不是这样做的,我的表是utf8的,所以MySQL服务器端就按照utf8读出来,而返回的结果集用gbk编码,之后在客户端显示的时候用gbk解码,所以我的朋友那里显示是正常的中文汉字。而在我这里呢,读取的时候用的是utf8,返回的结果集用utf8编码,而dos窗口下用gbk解码,自然就出现了乱码。