平台配置:Windwos XP SP2、IIS 6.0、PHP5、MySQL 5。mysql> show variables like '%set%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| auto_increment_offset    | 1                              |
| character_set_client     | gb2312                         |
| character_set_connection | gb2312                         |
| character_set_database   | gb2312                         |
| character_set_filesystem | binary                         |
| character_set_results    | gb2312                         |
| character_set_server     | gb2312                         |
| character_set_system     | utf8                           |
| character_sets_dir       | D:\Local\MySQL\share\charsets\ |
+--------------------------+--------------------------------+
9 rows in set (0.18 sec)在命令行执行命令:mysql> INSERT INTO Persons SET Lastname='张';
Query OK, 1 row affected (0.13 sec)可成功执行,但若通过 PHP,<?php
$con = mysql_connect("localhost", "root", "1234") or die('Conld not connect: ' . mysql_error());
mysql_select_db("test", $con) or die('select fault');$sql = "INSERT INTO Persons SET Lastname='张'";mysql_query($sql) or die(mysql_errno(). ': ' . mysql_error());
mysql_close($con);echo 'Inserted!';
?>结果网页显示错误:1366: Incorrect string value: '\xD5\xC5' for column 'Lastname' at row 1如何解决?

解决方案 »

  1.   

    在mysql_connect后面加一句SET NAMES UTF8,$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
    mysql_query("SET NAMES 'GBK'");
      

  2.   

    谢谢 ACMAIN_CHM,问题解决!
    但我还不明白这是为什么。我看 MySQL 手册说,SET NAMES 是来设置 character_set_client、character_set_connection、character_set_results 的,可之前这三个变量已经是 gbk 了呀,为什么还得设置呢?
      

  3.   

    PHP 程序很古怪的,即使你设定了连接是GBK。
    进行连接MySQL 的时候他也是使用你机器本身默认的语言集。到现在我也是搞不明白 PHP 是在哪里设定这个东西的。
    但 PHP 5.2.3 后提供接口【mysql_set_charset】给我们去设定语言集,表面上来看好像是PHP本身问题。
      

  4.   

    在MY。INI中设置默认字符集试试。
    [mysql]default-character-set=utf8
      

  5.   

    关键在与你安装mysql的时候要选择好字符集