又有问这个问题的了,再贴一次:)最近问这个的很多,我写一下我的理解。和字符相关的变量中这几个和sql很有关系:
 character_set_client
 character_set_connection
 character_set_results
此外就是数据库中对相应字段设置的charact set,如果没有对字段设置,缺省是table的charact set,table也没有指定则缺省使用database的。上面3个变量的作用是这样的,client表示客户端发送过来的字符集,results表示发送到客户端的字符集(这两个分开是因为发送过来和发送过去的不一定是同一个客户端),connection则在客户端和数据库起一个连接作用。
具体是这样:比如我在mysql命令行设置client为gbk,connection为utf8,results为gbk,数据库为big5,
当我发送一个insert语句的时候,这个语句作为gbk代码,先转为utf8代码(connection),再转为big5(database)插入数据库。
而运行一个select语句的时候,从数据库得到的结果则相反的过程,由big5转为utf8,再转为gbk,你得到gbk的结果。因此最主要的是让client和results和你使用的客户端一致。比如你的网页是utf8编码,你就要设置这两个为utf8。
而在mysql命令行的时候,我用的是2000,需要设置为gbk
而我们用的set names XXX,实际上就是同时设置这3个变量为XXX。在这样的情况下,我们可以把一个数据库中的不同表或不同字段设为不同的字符集,只要上面3个设置正确,就可以在数据库中同时使用不同的字符集。注意要保证你的数据库中的字符已经使用了正确的字符集,比如如果一开始你设置错误,插入数据后,本身数据的编码就是不正确的,然后即使设置改回来,也不可能得到正确的显示了。还有一个是编码互相之间的兼容性,如果一个字符在gbk中有,在utf8中没有,那么在gbk-》utf8-》gbk的过程中,它就变成了“?”

解决方案 »

  1.   

    再说一下具体解决的办法。首先要指定你的升级后的database及table及field的character set,一般来说我们用gb2312或者utf8的,如果不同时使用多种编码,只要指定database就可以,可以在建库的sql语句加上相应的character set,在phpMyAdmin里也可以修改。然后是导入旧数据。首先要确定自己的数据文件的编码。如果用phpMyAdmin导入,在界面上有文件编码的选项,一定要和数据文件的编码一致。
    如果从mysql的命令行导入,就要自己设置上面说到的3个变量,set names xxx。
    使用其它的客户端程序一样要注意。
    这样就可以让旧数据转入新数据库后的编码才是正确的,如果这一步错了,后面不可能得到正确的显示。然后是自己的程序,在连接后就可以执行一次set names xxx,根据你的网页编码而定。这样基本就可以保证编码正确了。你很有可能是导入的数据编码已经不对了。
      

  2.   

    现在我应该改哪里呢?我用2.5.7 没有问题,应该是改PHPMYADMIN的哪里的一个配置或者设置就可以了,但是我不知道怎么改,哪个大哥帮我一下。
      

  3.   

    修改方法:
    在phpMyAdmin的首页,有个语言选项,选择 简体中文就可以.
      

  4.   

    不是首页设置简体中文的问题,不知道为什么2.6.2 和MYSQL 4.1.2配合的时候只有中文的UTF编码可以选没有GB什么的那个晕哦,过两天结帖。(PS,2.6.2和4.0或者2.5.7和4.1.2都没有这个问题,不知道算不算BUG的。)
      

  5.   

    你的几个character的值是什么?在phpMYADMIN里看看
    数据库、表、有中文的字段的character set
      

  6.   

    首页的中文的确只有utf8的可选,但是这个不影响,实际上我选的是english-utf8,中文一样显示
      

  7.   

    我们也碰到这样的问题,后来用 phpmyadmin 2.5.7 就可以了,,不知道为啥!
      

  8.   

    你可以用命令方式查看一下你的几个character set变量,
    show variables like 'char%';
    我估计character_set_database是latin1
    这种情况下phpmyadmin旧的版本在选择gb2312后似乎应该能显示正确,
    但是新的版本不行,因为新版本会做latin1-》utf8的转换,使得每个汉字变成两个??