mysql_query returns the wrong character encoding for foreign characters
我的数据库表是UTF-8,但是通过PHP查询它时,字符却不同。
当查看数据库中的数据时,它看起来像这样:
1 | ?±??¤′?????¤§é…’?o— |
但是在PHP中它显示为
1 | ???|???±?¢a???¢???¥???¤???′???¥????¢a |
我注意到,当我在插入mysql之前使用base64_encode对数据进行编码,然后在数据出炉时对其进行解码,然后在PHP和浏览器中正确显示,并在数据库中显示正确:
1 | ?±??¤′?????¤§é…’?o— |
但是有些数据我不能首先对其进行编码,所以我不能总是这样做,所以我想知道为什么mysql_query使其以不同的方式输出。我尝试了很多事情
在查询之前要做的事情:
mysql_query(" set character_set_results ='utf8'");
和
1 |
在查询之前执行此操作:
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
这是我的html页面标题
" meta http-equiv =" Content-Type" content =" text / html; charset = UTF-8" /"
在相关字段上使用utf8_decode,但似乎会使情况更糟
但这与输出没有什么不同,我可以在同一页面中看到正确的(base64_decode)和不正确的字符
谢谢!
好的解决了,我相信Cake 1.2正在尝试对数据进行某种形式的转换或告诉mysql到某个地方。
从Cake中的database.php中删除encoding =>'utf8'后,它可以正常工作,当MYSQL表为UTF8时,无需在PHP代码或MYSQL中的任何位置设置UTF8!
另一个问题是,我认为较旧的数据未正确存储在数据库中,也许该表之前不是UTF8,所以当PHP从CSV文件读取数据时,它会将其存储为乱码(不正确)数据