打印本文 打印本文 关闭窗口 关闭窗口
PHP存取 Mysql 数据乱码终极解决方案
作者:佚名  文章来源:本站原创  点击数1804  更新时间:2013/1/9 13:48:22  文章录入:mintao  责任编辑:mintao

PHP存取 Mysql 数据乱码终极解决方案

对PHP和Mysql?的研究并不深进,以下是我的一些个人心得,说的可能不是很明白,但确实是很管用的东西,
我的Discuz版本是UTF-8的,但是打开phpmyadmin显示的是?整理栏目:gbk_chinese_ci?,而且查看数据显示完全正常,没有乱码,这个表示,实际?discuz在存取数据库用的是?gbk编码,但页面显示确实UTF-8编码阿,怎么没有乱码呢?难道Discuz做了编码转换?
  最近在公司开发一个网站,由于用到了?cakephp框架?,默认编码为UTF-8,而且我的计算机是Ubuntu,通常用的都是UTF-8编码,所写的程序页面也都是UTF-8编码的文件,自然想到用UTF-8编码的数据库,这个题目可把我苦大了快播电影T-SIZE: 9pt">
按照一般网上的说法是建立数据库表的时候加上 DEFAULT?CHARSET?UTF8?,创建的表的整理栏目在phpmyadmin里面显示的?是utf8_general_ci?,在执行sql?语句是加上“set?names?utf8”,这样就会正常了,插进的数据在页面里面显示完全正常,我的页面是?设置了UTF-8编码的?,

?

?

<meta?http-equiv="content-type"content="text/html;?charset=UTF-8"/>?,按理说应该没有什么题目的,
 但是在Phpmyadmin里面显示的确是乱码,而且假如我在phpmyadmin里面修改了一个数据,
在phpmyadmin里面显示就是正常了,但是到页面显示却乱码了,
 于是我想参考一下discuz的做法在phpmyadmin里面强行把表和所有的char,varchar?和?text?字段改为gbk_chinese_ci
,修改后,phpmyadmin?里面正常了,但是到页面显示确是乱码了,公司原来的数据库是?ms-sql?server?2000?的现在要导进到?mysql5,
 原来的?两个汉字在导进到?char(10)的时候?竟然报错说是字符太长了,怎么可能呢?一个字符按照UTF16也就4个字节?最多才到8个字节阿
 怎么回事阿?网上有人说是由于编码不当可能会把UTF8的编码经过两次转换?变成一个汉字6个字节存储,具体是怎么回事我也不清楚
 ,不过后来经过多次实验终于明白了原来Mysql存取编码和查询编码并不一致,需要手动指定,也可以在?mysql?的配置文件里指定编码
 网上有人的解决办法是:
 PHP源文件使用的是UTF-8编码?mysql?存储用的是GBK
经本人(闵涛亲测有效,特此收藏备用):
mysql_query("SET NAMES UTF8");

打印本文 打印本文 关闭窗口 关闭窗口