集结生活中的酸甜苦辣与您分享!!欢迎留言!

mysql造成的乱码的解决办法

上一篇 / 下一篇  2007-07-30 16:51:29 / 个人分类:转载

要说mysql乱码,得先从mysql的几个参数说起,从mysql5开始,多了几个设置字符集的系统变量:

character_set_client          客户端字符集

character_set_connection      客户端与服务器端连接采用的字符集

character_set_results         SELECT查询返回数据的字符集

character_set_database        数据库采用的字符集

乱码问题一般是由于以上几个变量设置错误照成的,很多人在请教乱码问题的时候,一般都会得到一个这样的答案:你先set names一下

那么set names是什么呢? set names实际上就是同时设置了character_set_client, character_set_connection, character_set_results这三个系统变量。

 

例如set names 'gbk'等同于

set @@character_set_client = 'gbk'

set @@character_set_connection = 'gbk'

set @@character_set_results = 'gbk'

很多情况下,这样设置了之后就能把乱码问题解决了。但是还是不能完全避免出现乱码的可能,为什么呢?

因为character_set_client,character_set_connection这两个变量仅用与保证与character_set_database编码的一致,而character_set_results则用与保证SELECT返回的结果与程序的编码一致。

例如,你的数据库(character_set_database)用的是utf8的字符集,那么你就要保证character_set_client,character_set_connection也是utf8的字符集。而你的程序也许采用的并不是utf8,比如你的程序用的是gbk,那么你若把character_set_results也设置为utf8的话就会出现乱码问题。此时你应该把character_set_results设置为gbk。这样就能保证数据库返回的结果与你的程序的编码一致。

下面我给出一段用于设置字符集的代码(其中用到了一个我自己写的db库,相信应该不影响阅读):

<?

//假设我们的程序采用的是utf8的字符集

$program_char='utf8';

//先检查mysql的版本号,如果版本号大于4我们才可以设置这些系统变量(mysql4还没有这些系统变量)

$version=current($db->fetch_one('SELECT VERSION()'));

if(substr($version,0,1) >4)

{

//取出当前数据库的字符集

$sql='SELECT @@character_set_database';

$char=current($db->fetch_one($sql));

//将客户端字符集(character_set_client)和连接字符集(character_set_connection)设置为与数据库字符集(character_set_database)一致

$db->query('SET @@character_set_client = "'.$char.'"');

$db->query('SET @@character_set_connection = "'.$char.'"');

//SELECT查询返回数据的字符集设置为与当前程序的字符集一致

$db->query('SET @@character_set_results = "'.$program_char.'"');

}

?>

 

 

1、要保证数据库中存的数据与数据库编码一致,即数据编码与character_set_database一致;

2、要保证通讯的字符集与数据库的字符集一致,即character_set_client, character_set_connection与character_set_database一致;

3、要保证SELECT的返回与程序的编码一致,即character_set_results与程序编码一致;

4、要保证程序编码与浏览器编码一致,即程序编码与<meta http-equiv="Content-Type" content="text/html; charset=?"/>一致。

 


TAG: 转载

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

数据统计

  • 访问量: 11163
  • 日志数: 46
  • 图片数: 4
  • 建立时间: 2007-05-15
  • 更新时间: 2008-03-05

RSS订阅

Open Toolbar