问题比较麻烦我试着描述一下,为了将excel的资料导入数据库我下了phpexcelreader这个class,将里面的example改了一下为了支持中文我用:
$data->setOutputEncoding('cp936');作为输入编码,然后连接数据库导入都没有问题,但是打开phpmyadmin后发现是乱码,试着吧上面那条语句改成:$data->setOutputEncoding('utf-8');也不行于是我在连接数据库之前加了一句:mysql_query("SET NAMES 'gbk'");在phpmyadmin里面显示正常了我看了下网页的编码显示的是“(中文简体)gb18030”而不是“(中文简体)gbk”。然后我打开cmd进入mysql用select语句打开数据库发现在cmd下显示的却是乱码,我同样运行了一句“set names 'gbk'”在select语句打开就显示正常了。我以为是因为编码的问题我想为了安全都用utf-8格式,可是用了很多办法都不能同时让phpmyadmin 和cmd运行的mysql都不显示乱码。后来看mysql的document里面说mysql的编码有好多个比如character_set_client,character_set_results等等,我就想都换成utf-8于是我在程序里把上面那句改成:$data->setOutputEncoding('utf-8');同时在数据库连接里写上“mysql_query(set names 'utf8')”在phpmyadmin里可以显示正常了,可是同样我在cmd的mysql里用“set names 'utf8'”按我的预期应该和phpmyadmin一样了可是这回显示的还是乱码。要想在cmd的mysql里显示正常还是要写“set names 'gbk'”;我有点糊涂了不知道是怎么回事。按理说同样程序运行下来顺序是先:$data->setOutputEncoding('utf-8');然后mysql_query("SET NAMES 'gbk'");只不过一个是网页运行的一个是在cmd手工命令运行的为什么一个乱码一个正常呢?急求哪位高手能给我指点一下怎样让在phpmyadmin里和cmd的mysql里都显示中文正常!万分谢谢!

解决方案 »

  1.   

    set names 设定的是客户端的码,
    它会同时设置3个参数, character   set   results   ,character   set   client,character   set   connection,在一次数据库操作过程中,编码的转换过程是:
    (输入)client=>connection=>database(或server或table或column)=>connection=>results(输出)
    就是说不管你数据库是什么编码,
    如果你在gbk的mysql客户端看,需要set names gbk, 
    如果是台湾人在big5的机器用mysql连接上后,就需要set names big5如果是网页,就需要和你网页的<meta http-equiv="Content-Type" 里设置的码一致.可以参考这个老帖子,记得我还写过一个更详细的,不过好像搜索不到了.....
    http://topic.csdn.net/t/20051213/11/4456072.html
      

  2.   

    所以你的情况是完全正常的,在cmd里,你的确需要set names gbk, 和你的phpmyadmin里的不需要一样
      

  3.   

    十分感谢,还有我想追加问一下,我用的phpexcelreader,如果你在excel输入选择的是日期的话他倒入数据库后会变得多一天,我看了下源代码,发现excel中日期是按照秒存储的,我在本机的apache时间设定的是“中国时区”是不是和编者的时间有冲突?请问如何解决?谢谢
      

  4.   

    应该是和时区有关联
    Date_default_timezone_set ( "PRC" );