平台配置: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如何解决?
+--------------------------+--------------------------------+
| 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如何解决?
mysql_query("SET NAMES 'GBK'");
但我还不明白这是为什么。我看 MySQL 手册说,SET NAMES 是来设置 character_set_client、character_set_connection、character_set_results 的,可之前这三个变量已经是 gbk 了呀,为什么还得设置呢?
进行连接MySQL 的时候他也是使用你机器本身默认的语言集。到现在我也是搞不明白 PHP 是在哪里设定这个东西的。
但 PHP 5.2.3 后提供接口【mysql_set_charset】给我们去设定语言集,表面上来看好像是PHP本身问题。
[mysql]default-character-set=utf8