您的位置:首页 > 编程语言 > PHP开发

Php+MYSQL中文编码问题解决全过程

2007-04-23 14:32 549 查看
开发环境:
Php5+mysql5
中文编码问题产生的全过程:
网页编码格式为gb2312(当然网页不是我们做的,如果是我们自己做的话不用说肯定是utf-8编码了,也就不会有什么编码问题。),书库库我们刚开始设置为gb2312编码。
问题:有些汉字无法存入数据库,如:囍 情况:刚开我们在创建数据连接之后执行:$mysqli -> set_charset('gb2312'); 发现有“囍”字的字段数据为空。后来把上面那条语句改为:$mysqli -> set_charset('gbk');发现“囍”的位置变成:“?”。
解决方案:
一、将所有的网页以及数据库全部转为utf-8,但是我们的系统已经到了用户测试阶段,而且用户不想把数据重新输入一次,如果正常则直接绑定到正常网址,再说我根本不想这么做。
二、不用改变网页的情况下,只改变数据库的参数或进行简单的操作就可以解决这个问题,还好这种办法被我找到,这种办法是最容易得的解决办法(对我来说)。接下来我就详细介绍这种方法:
1.导出数据库中的数据。方法:到mysql安装目录的bin下执行:./mysqldump –p databasename > data.sql
根据提示输入密码(没有密码就不用输了)。
2.用vi(你可以随便使用什么编辑器)编辑: data.sql :
$>vi data.sql
在vi命令模式下输入: :g/gb2312/s//utf8/g 将gb2312替换为utf8
SET NAMES utf8; 的注释去掉,在文件的前几行。
保存退出 :x
3.改变数据库的默认编码,方法:打开my.cnf(mysql配置文件)
在[mysqlclient]下面添加:default-character-set=gbk
在[mysqld]下面添加:default-character-set=gbk
重起mysql服务器。
4.新建一个数据库:
Create database newdatabasename character set utf8
将数据导入数据库:
到mysql安装目录下的bin下面执行:
./mysql -h localhost -uroot -pyourpassword newdatabasename < data.sql
5.在php数据库建立连接的后面设置客户端数据编码格式,如:
$mysqli = @new mysqli($host,$uid, $pwd, $dbname);
/* check connection */
if (mysqli_connect_errno()) {
die("服务器异常,数据库连接失败!");
}
$mysqli -> set_charset('gbk');
…….
总结:这种解决办法的主要思想是,只改变数据库的编码,而不改变数据客户端编码,mysql会自动进行编码转换。这样在不用改变网页程序的情况下解决中文编码问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: