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

作者:袖梨 2022-06-24

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

 代码如下 复制代码
1 $mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
2 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之前进行设置操作了,如例子

 代码如下 复制代码

set_time_limit(0);
mysql_connect('localhost','root','root');
mysql_select_db('sms');
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用作导出数据库源。查看字符编码的系统变量:

 mysql> show variables like ‘%char%';
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | gbk |
| character_set_system | utf8 |
| character_sets_dir | D:mysqlsharecharsets |

+————————–+—————————-+

查看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平台下

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

 mysql> show variables like ‘%char%';

+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | gbk |
| character_set_system | utf8 |

+————————–+—————————-+

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

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

1. use database_name;
2. set names utf8; (或其他需要的编码)
3. source example.sql (sql文件存放路径)
 

相关文章

精彩推荐