当我们用PHP往MySQL数据库里插入中文时,一旦出现????乱码,很多同学就抓狂了,身为中国人,你却把中文汉字变成乱码,那我可不答应,于是乎我们就开始奔波于个大论坛发帖求助....
对于MySQL中文乱码其实常见的也就那么几个问题,处理好了就OK了,这里总结了几点解决方法,都是我们经常遇见的,大家可以对照着解决问题
1、Db编码格式不正确
用status可以查看当前数据库的情况
mysql> status
--------------
mysql Ver 14.14 Distrib 5.5.32, for debian-linux-gnu (x86_64) using readline 6.2
Connection id: 54
Current database: mydbname
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.32-0ubuntu0.12.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 5 hours 18 min 41 sec
Threads: 1 Questions: 182 Slow queries: 0 Opens: 225 Flush tables: 1 Open tables: 55 Queries per second avg: 0.009
--------------
我们可以看到红色字体标出来的两行,发现问题了吧,Db和Server都是latin1,我们需要将他设置成utf8就能解决问题了。
这就需要我们在创建数据库时,将编码设置好,下面是设置编码的示例:CREATE DATABASE `mydbname` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
别忘了,数据库编码设置好后还要设置表的编码
CREATE TABLE `database_user` (
`ID` varchar(40) NOT NULL default '',
`UserID` varchar(40) NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、网页编码问题
这个问题UncleToo其实也没完全搞明白,同样是GB2312的程序,有时插入到MySQL是正常汉字,而有时候却成了乱码,我的解决办法就是在需要与MySQL交互时就在程序里给出 set names utf8 命令,如果你有其他更好的办法也可以一起交流一下。
3、改变数据库默认编码
使用 SHOW VARIABLES LIKE ''character_set_%''查看数据库字符集
mysql> SHOW VARIABLES LIKE ''character_set_%'';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
这时,我们需要将latin1编码改成utf8。
找到my.ini文件(#开头的是注释部分)在MySQL组下修改
default-character-set=utf8
或者直接输入命令修改:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
以上三种乱码情况是最常见的,也是新手经常遇到的,这里一起分享给大家,希望能给大家带来帮助。
其他中文乱码问题UncleToo暂时还没遇到过,如果您碰到了且有很好的解决办法,可以告诉我们,并分享给大家
更多MySQL技术,请登录http://www.uncletoo.com