先来看看我的字符集设置
全都是utf8.这里没有什么问题
接下来我创建了一个数据表book.来看下我创建的表结构
当输入命令:mysql> insert into book(bookname,publisher,author,price,detail) values(‘PHP‘,‘电子工业出版社‘,‘武胜利‘,‘80.00‘,‘与PHP相关的图书‘);
ERROR 1366 (HY000): Incorrect string value: ‘\xB5\xE7\xD7\xD3\xB9\xA4...‘ for co
lumn ‘publisher‘ at row 1
会看到是报错了,是字符集问题;我现在设置下字符集:set names gbk;
mysql> insert into book(bookname,publisher,author,price,detail) values(‘PHP‘,‘电
子工业出版社‘,‘武胜利‘,‘80.00‘,‘与PHP相关的图书‘);
现在再插入数据,成功了。查了下资料。myslq客户端(黑窗口)的字符集默认是gbk的。所以插入成功。
然后再select * from book; 显示的也是正常的中文。没有问题。
当我创建一个dmt.php(
在这个脚本文件头部通过header("Content-type:text/html;charset=utf8") 字符集设置也为utf8
)脚本文件,通过这个脚本文件链接数据库,再向数据插入数据的时候。数据插入成功后。再回到黑窗口里面select * from
book;的时候发现中文数据全是乱码了。 set names gbk; 之后在select 也还是乱码。该怎么解决呢?
答案是。在dmt.php脚本文件里面,加入如下两条语句
$character = "set names utf8";
mysql_query($character);
问题就出现在客户端。虽然我们使用header();指定了客户端的字符集为utf8.但是那只是让dmt.php这个脚本文件显示在浏览器中的中
文正常。当dmt.php这个脚本文件跟mysql进行连接的时候,并不会以header()指定的字符集跟mysql数据库进行数据传输。所以我们要加
入以上两条语句“明确”指定客户端跟mysql服务器端进行连接的字符集。
这个时候我们回到mysql客户端,set names gbk; select * from book; 此时mysql客户端里面中文就可以正常显示了。
如果我做如下改动
$character = "set names gbk";
mysql_query($character);
再通过dmt.php脚本文件执行myslq命令向数据库里插入中文。则在myslq黑窗口中select * from book;时显示的依然是乱码
总结:不管何时,都要让客户端跟myslq服务器端指定一样的字符集,才能保证数据显示不出现问题。