php与mysql中文乱码问题,使用mysql数据库时,有时会出现中文乱码问题,一般是以下几种情况造成的,遇到时可以依次进行排除。
mysql数据库编码问题 php文件编码问题,使用php程序向mysql数据库插入数据时,若php文件编码与mysql编码不一致,也会造成中文数据插入数据库后乱码。 客户端显示问题,mysql和php编码都没问题时,可能是因为xshell、secretcrt这类客户端显示编码问题,造成显示中文时始终乱码。
解决办法
修改mysql数据库编码设置
在mysql中输入以下命令查看编码设置
show variables like '%char%'
Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
从上图中可以看到 MySQL 有六处使用了字符集,分别为:client 、connection、database、results、server 、system。其中与服务器端相关:database、server、system(永远无法修改,就是utf-8);与客户端相关:connection、client、results 。
采用set可以修改以上变量编码,例:
set character_set_client=utf8
修改php文件编码
在连接数据库前通过mysql_query(“set names ‘utf8’”,$conn);进行设置
$conn=mysql_connect("localhost", "用户名", "密码");
mysql_query("set names 'utf8'",$conn);
mysql_select_db("数据名",$conn);
$exec="insert into net_city (cityname,inarea,outarea,tel) values ('".$link_cityname."','".$link_inarea."','".$link_outarea."','".$link_tel."')";
$result=mysql_query($exec,$conn);
if($result){
echo "1";
}else{
echo "0";
}
修改已经有的table的编码
alter table table_name convert to character set utf8;
修改mysql的配置文件,让mysql默认编码为utf8
mysql使用的配置文件为
/etc/mysql/my.cnf
在配置文件中添加
[mysqld]
character-set-server=utf8
这是再创建表就是默认为utf8编码了
显示问题
上面改了服务器的字符编码,但是如果不改client的,在终端上显示的还是???
还需要在配置文件中加上
[client]
default-character-set=utf8