使用mysql数据库时,有时会出现中文乱码问题,一般是以下几种情况造成的,遇到时可以依次进行排除
mysql数据库编码问题php文件编码问题,使用php程序向mysql数据库插入数据时,若php文件编码与mysql编码不一致,也会造成中文数据插入数据库后乱码。客户端显示问题,mysql和php编码都没问题时,可能是因为xshell、secretcrt这类客户端显示编码问题,造成显示中文时始终乱码。在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在连接数据库前通过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"; }mysql使用的配置文件为
/etc/mysql/my.cnf
在配置文件中添加
[mysqld] character-set-server=utf8这是再创建表就是默认为utf8编码了
上面改了服务器的字符编码,但是如果不改client的,在终端上显示的还是???
还需要在配置文件中加上
[client] default-character-set=utf8