当前位置:首页 > PHP教程 > php应用 > 列表

快速解决PHP+MYSQL 出现乱码的解决方法

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-15 15:22:01 浏览: 评论:0 

如果你mysql查询出来乱码的话,多半是中文乱码了了,这种问题解决办法只需要统一页面与数据连接时的编码设置就可以解决,下面总结了些方法.

在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下:

$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);

mysql_query("SET NAMES 'GBK'");

数据库字符集为utf-8,连接语句用这个.

  1. mysql_query("SET NAMES 'UTF8'"); 
  2. mysql_query("SET CHARACTER SET UTF8"); 
  3. mysql_query("SET CHARACTER_SET_RESULTS=UTF8'"); 

这些方法都在php 连接mysql之前进行设置操作了,如例子:

  1. set_time_limit(0);  
  2. mysql_connect('localhost','root','root'); 
  3. mysql_select_db('sms'); 
  4. mysql_query("set Names 'gbk'"); 

这样就是设置我的页面与数据库统一编码了,是不是简单呀,那么如果是导入数据乱码解决办法不一样.

linux系统中

linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题.

解决mysql导入导出数据乱码问题

首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8,例如下面的代码:

mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql

那么导入数据的时候也要使用--default-character-set=utf8:

mysql -uroot -p --default-character-set=utf8 dbname < bak.sql

这样统一编码就解决了mysql数据迁移中的乱码问题了,我使用windows作为导出数据源,并导入 freebsd环境下的mysql库.

解决方法:导出数据.

一、首先在windows平台下mysql用作导出数据库源,查看字符编码的系统变量:

  1. mysql> show variables like ‘%char%';  
  2. +————————–+—————————-+  
  3. | Variable_name | Value |  
  4. +————————–+—————————-+  
  5. | character_set_client | latin1 |  
  6. | character_set_connection | latin1 |  
  7. | character_set_database | latin1 |  
  8. | character_set_filesystem | binary |  
  9. | character_set_results | latin1 |  
  10. | character_set_server | gbk |  
  11. | character_set_system | utf8 |  
  12. | character_sets_dir | D:mysqlsharecharsets | 
  13. +————————–+—————————-+ 

查看character_set_database,这里是latin1,latin1是装不了多字节字符集的.

二、在windows下设置系统变量为utf8

mysql>set character_set_database=utf8; ##设置默认的字符集为utf8

三、导出数据

mysql> select * from table into outfile ‘c:table.txt' where +条件

这时导出了我想要的部分数据,并以txt文件存在 table.txt中.

导入数据,在freebsd平台下.

一、同样设置字符编码的系统变量

  1.  mysql> show variables like ‘%char%'; 
  2. +————————–+—————————-+  
  3. | Variable_name | Value |   --phpfensi.com 
  4. +————————–+—————————-+  
  5. | character_set_client | latin1 |  
  6. | character_set_connection | latin1 |  
  7. | character_set_database | latin1 |  
  8. | character_set_filesystem | binary |  
  9. | character_set_results | latin1 |  
  10. | character_set_server | gbk |  
  11. | character_set_system | utf8 | 
  12. +————————–+—————————-+ 
  13. mysql>set character_set_database=utf8; ##设置默认的字符集为utf8 

二、转载数据

mysql>load data local infile ‘/home/table.txt' into table `table`;

至此、条件数据完整导入导出,并处理了乱码的情况.

总之,两台mysql服务器导入导出时,一定要确保两台服务器的character_set_database参数相同,这样才能防止一些 乱码的情况,当然我们还可以使用其他字符集,如gbk来进行调整,视情况操作了.

附后,通用解决办法.

方法一:通过增加参数 –default-character-set = utf8 解决乱码问题

mysql -u root -p password < path_to_import_file –default-character-set = utf8

方法二:在命令行导入乱码解决

use database_name;

set names utf8; (或其他需要的编码)

source example.sql (sql文件存放路径) 

Tags: PHP乱码 MYSQL乱码

分享到: