注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

快乐的机器猫 大桥加加网易分站

要有更宽广的视野和胸怀

 
 
 

日志

 
 

在WINDOWS下使用PHP+MYSQL的乱码问题--统一换成UTF-8  

2011-11-26 20:09:18|  分类: 计算机软件学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      之前写过一篇MYSQL乱码问题是解决GBK的,但似乎并不能解决UTF-8的问题

1. 先说环境:
 WINDOWS XP + WAMP SERVER V2.1(集成了php,mysql,apache等)
数据库结构为:数据库名itemlist, 表名student_info, 3个字段id, name, age.  其中name是varchar,使用的是utf8_general_ci
在创建数据库的时候能用utf8的都用了utf8

2. 乱码症状:
   试验过程,共分2个文件,先来看一下
1)
//tablecommit.php
<form action="action.php" method="post">
 <p>姓名: <input type="text" name="name" /></p>
 <p>年龄: <input type="text" name="age" /></p>
 <p><input type="submit" /></p>
</form>
2)
//action.php
<?php
    $var_name=htmlspecialchars($_POST['name']);
    $var_age=(int)$_POST['age'];
?>

你好,<?php echo $var_name; ?>。
你 <?php echo $var_age; ?> 岁了。

<?php
    //db params
    $dbserver="127.0.0.1";
    $dbusername="root";
    $dbpassword="";
    $dbname="itemlist";
    $dbconn=mysql_connect($dbserver, $dbusername, $dbpassword);

    //open db
    mysql_select_db($dbname, $dbconn);

    //operate db test1
    $table_name="student_info";
    $querystr_select="select * from ".$table_name;
    $queryresult1 = mysql_query($querystr_select);
    echo "row count:".mysql_num_rows($queryresult1);

    //operate db test2
    $querystr_insert="insert into ".$table_name." (name,age) VALUES(\"".$var_name."\",\"".$var_age."\")";
    $queryresult2 = mysql_query($querystr_insert);
    echo "insert operation affected rows:".mysql_affected_rows($dbconn);

    //close dbconn
    mysql_close($dbconn);
?>
在乱码的时候,显示的中文在phpmyadmin是不可见的,貌似空白一样

3. 解决方案
1) 通过phpmyadmin来查看编码
使用 SHOW VARIABLES LIKE "char%", 显示

Variable_name     Value
character_set_client     utf8
character_set_connection     utf8
character_set_database     utf8
character_set_filesystem     binary
character_set_results     utf8
character_set_server     latin1 //这里是不对的
character_set_system     utf8
character_sets_dir     c:\wamp\bin\mysql\mysql5.5.8\share\charsets\

2)改my.ini文件
在[client]下面加    default_character_set=utf8
在[mysqld]下面加  character_set_server=utf8
修改后重启MYSQL服务,再查看编码成了:
Variable_name     Value
character_set_client     utf8
character_set_connection     utf8
character_set_database     utf8
character_set_filesystem     binary
character_set_results     utf8
character_set_server     utf8
character_set_system     utf8
character_sets_dir     c:\wamp\bin\mysql\mysql5.5.8\share\charsets\

3)改php文件

<?php
    header('content-type;text/html;charset=utf-8');
    $var_name=htmlspecialchars($_POST['name']);
    $var_age=(int)$_POST['age'];
?>

你好,<?php echo $var_name; ?>。
你 <?php echo $var_age; ?> 岁了。

<?php
    //db params
    $dbserver="127.0.0.1";
    $dbusername="root";
    $dbpassword="";
    $dbname="itemlist";
    $dbconn=mysql_connect($dbserver, $dbusername, $dbpassword);

    //open db
    mysql_select_db($dbname, $dbconn);

    mysql_query("set names 'utf8'");

    //operate db test1
    $table_name="student_info";
    $querystr_select="select * from ".$table_name;
    $queryresult1 = mysql_query($querystr_select);
    echo "row count:".mysql_num_rows($queryresult1);

    //operate db test2
    $querystr_insert="insert into ".$table_name." (name,age) VALUES(\"".$var_name."\",\"".$var_age."\")";
    $queryresult2 = mysql_query($querystr_insert);
    echo "insert operation affected rows:".mysql_affected_rows($dbconn);

    //close dbconn
    mysql_close($dbconn);
?>


另外, 有人说如果在WINDOWS的mysql命令行下,由于WINDOWS本身只支持GB2312/GBK方式,所以要set names gb2312; 再插入数据,这实在是很BT。好在我一般不使用命令行,而使用phpmyadmin这种web方式来操作。

再补充一点:以我个人的习惯,把php文件本身也存成UTF-8格式的,不知道和消除乱码有关系没,请大家自己实验吧。
  评论这张
 
阅读(961)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018