mysql_query为外来字符返回错误的字符编码

时间:2014-03-07 07:11:00

标签: php mysql character-encoding

我的数据库表是UTF-8,但是当通过PHP查询它时,字符会有所不同。

查看数据库中的数据时,它显示如下:

汕头å›åŽå¤§é…’店

但在PHP中它出现了

汕头åÂÂââ

我注意到当我在插入mysql之前用base64_encode对数据进行编码然后在它出现时对其进行解码然后它在PHP和浏览器中正确显示并显示在数据库中:

 汕头å›åŽå¤§é…’店

但是有些数据我不能先编码它所以我不能总是这样做所以我想知道为什么mysql_query使它以不同的方式出现。我尝试了很多东西

  1. 在查询之前执行:

    mysql_query(“set character_set_results ='utf8'”);

  2. mysql_query("SET NAMES UTF8"); 
    
    1. 在查询之前执行此操作:

      mb_internal_encoding( 'UTF-8');  mb_http_output( 'UTF-8');  mb_http_input( 'UTF-8');

    2. 这是我的html页面标题

      “meta http-equiv =”Content-Type“content =”text / html; charset = UTF-8“/”

    3. 在相关字段上使用utf8_decode但似乎更糟糕

    4. 但它与输出无异,我可以在同一页面中看到正确的(base64_decode)和不正确的字符

      谢谢!

1 个答案:

答案 0 :(得分:-1)

确定已经解决了,我相信Cake 1.2正在尝试对数据进行某种转换或将mysql告诉某处。

从Cake中的database.php中删除encoding =>'utf8'后,它工作正常,当MYSQL表是UTF8时,无需在PHP代码或MYSQL中的任何地方设置UTF8!

另一个问题是我认为旧数据存储在数据库中的错误,可能表格之前不是UTF8,所以当PHP从CSV文件中读取数据时,它将其存储为乱码(不正确)数据