mysql字符集

今天把mysql数据备份了一下,但是备份完成,登陆备份数据库查询的时候发现都是乱码,数据库编码设置跟原来的数据库是一样的,都是utf8,很奇怪。

网上查了一些资料,发现还是字符编码的问题:
首先,用show variables like '%char%' 查看mysql的编码设置

character_set_client 是客户端的编码,当服务器接收到客户端传来的数据时,就会用character_set_connection/collation_connection指定的字符集把数据从character_set_client转换到character_set_connection,最后再使用character_set_database字符集存储到数据库中;当提交查询的时候,mysql从数据库中把用character_set_database字符集编码的数据提取出来,再转换成character_set_results指定的字符集


所以:因为client跟connection都是latin1,数据库编码是utf8,客户端的数据先被转成latin1,再到utf8,但是utf8是兼容的,所以在这过程中信息不回丢失;但是查询的时候因为results字符集是latin1,所以我看到的就是乱码,我尝试把用set character_set_results = utf8 把results字符集改成utf8,果然再查询出来的内容就正常了;

另外就是用应用程序查询的时候就算results字符集不是utf8,查询出来结果也是正常的,不知道是这时候不通过character_set_results转换呢还是应用程序最后又把结果转换成utf8??

posted on 2012-07-17 17:18  maolj  阅读(141)  评论(0编辑  收藏  举报

导航