我用dw写php代码,已经针对utf-8做了如下设置:
1、所有文件都转换成utf8编码;
2、数据库都使用utf8字符集以及utf8_general_ci整理;
3、所有html页面都加上<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />;
4、所有css文件都加上@charset "utf-8"。我做了以上四点设置之后,数据库里的中文能正常读写并且到页面中显示,唯一的问题就是在mysql里的中文字符都是乱码,我在每个mysql查询的前面都加上set names "utf8"之后就好了。请问这个set names "utf8"一定要在每次查询前都加上吗?不加有没有什么问题?因为我之前没加的时候,中文字符一样可以正常读取,只是在mysql里看到的是乱码。

解决方案 »

  1.   

    你在mysql里看到的?还是说你是在phpmyadmin里面看到的?
      

  2.   

    LZ说的应该是在MYSQL中看到的吧,这个是因为MYSQL在默认配置中default-character-set=latin1而不是utf8你可以在MYSQL的my.ini文件中做一下修改就可以了.
      

  3.   

    我是在navicat for mysql里看到的我在安装mysql的时候就是选的utf-8做默认字符集,在建立数据库和数据表的时候也是用的utf-8。
      

  4.   

    至mysql4.1以后,mysql的编码有三个重点。
    1.数据表单编码。
    2,传输编码。
    3,数据存储编码。数据表单编码就如LZ控制的(X)Html文件本身的编码。
    数传编码就是set names xxxx,传输编码一般在建立。链接后,初始化一次就行了。与在构造函数里最好,不用每次select之前调用。
    数据存储编码就是数据在库中的存储编码。如果是历史数据迁移,特别是争对4.0以前的mysql数据迁移,所有存储都是latin1。数据存储编码不会明确的造什么麻烦,但不规范。就像一杯红酒要用玻璃杯装着一样。用其它任易类型都可以存储数据。你用塑料杯喝过红酒吗?基本上都是保证三点同步,规范了,在未来开发中才少了很多障碍。
      

  5.   

    ——你用MySQL控制台查看也是乱码吗 ??如果不是说明是你的navicat有问题。
    这个不是问题,只要你网页中输出正常不就就ok了(至少基本目的是达到了)??
      

  6.   

    在你链接了数据库然后use databasename之后加上set names 就好了,不用每个query都加
      

  7.   


    在mysql command line client里看到的也是乱码,可在php里更新和输出时都是正常的,这是怎么回事啊?
    而且在每次连接数据库之后set name一下再插入记录,这样在navicat for mysql里看到的就没有乱码了,可在命令行里输出的还是乱码。
    虽然以上两个问题都不影响正常使用。
    PS:我的mysql在安装时就将默认编码设置成utf-8了。
      

  8.   

    有点昏,在mysql command line client里发现有这样的情况:
    set names 'utf8';
    select [字段] from [表];
    输出的汉字还是乱码。set names 'gbk';之后再查询,发现就显示正常了,难道我插入时不是utf-8编码?
    可是我在html里定义了所有html页面都加上 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />;
    所有css文件都加上@charset "utf-8"
    在php里insert之前也set names='utf8';了
    mysql在安装时选择的默认编码也是utf8,数据库也是utf8字符集。
    怎么在mysql command里只能用gbk编码才能正常显示中文?
      

  9.   

    因为你的mysql command 是gbk的环境,就是说你调用mysql的数据库的环境是什么编码你就要使用什么编码,如果你的网页时gbk 的,那就要use gbk,反之 utf-8的 那你就要use utf-8
      

  10.   


    我的网页、css都是utf-8编码,可存进mysql里的汉字,在命令行里只能set names 'gbk';之后才能显示正常。
      

  11.   

    我也来顶一下,顺便推荐一个数据库视频教程,http://www.cdlanhai.com/zxst/
      

  12.   

    你没有明白我的意思,set names 是你保存或你到处是需要的编码格式,并不是你的数据库里边的内容的编码格式,就是说我可能保存的时候set names utf 导出时gbk ,因为你的命令行是gbk的编码的,所以你set names gbk 以后,数据库会把结果给你转成 gbk的然后显示出来,这样的话你的数据和你的命令行的环境是一个编码,所以就显示正常,如果你的command是gbk的,你set utf,则会把数据给你转成utf的出来,和你的命令行环境的编码不一致,就会显示乱码了