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

      之前写过一篇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格式的,不知道和消除乱码有关系没,请大家自己实验吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值