具体现象见下表:mysql> select * from person;
+----+-------------+-------------+
| Id | Nam | Ifo |
+----+-------------+-------------+
| 2 | Me | Good boy!!! |
| 3 | Wangqunfeng | gggg |
+----+-------------+-------------+
2 rows in set (0.01 sec)mysql> insert person(Nam,Ifo) values('我','好人');
ERROR 1366 (HY000): Incorrect string value: '\xCE\xD2' for column 'Nam' at row 1
mysql>
Nam 类型为varchar(20)
Ifo类型为varchar(100)望高手指点
+----+-------------+-------------+
| Id | Nam | Ifo |
+----+-------------+-------------+
| 2 | Me | Good boy!!! |
| 3 | Wangqunfeng | gggg |
+----+-------------+-------------+
2 rows in set (0.01 sec)mysql> insert person(Nam,Ifo) values('我','好人');
ERROR 1366 (HY000): Incorrect string value: '\xCE\xD2' for column 'Nam' at row 1
mysql>
Nam 类型为varchar(20)
Ifo类型为varchar(100)望高手指点
各字符集设置如下:
mysql> show VARIABLES like "character%";
+--------------------------+-------------------------------------+
| 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 | D:\MySQL Server 5.1\share\charsets\ |
+--------------------------+-------------------------------------+
8 rows in set (0.15 sec)
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;
CREATE TABLE `db_name`.`tb_name` (
id VARCHAR(20) NOT NULL,
name VARCHAR(20)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在查询前先执行 set naems gbk;
以什么编码自己指定
改成gbk就可以了
insert into person(Nam,Ifo) values('我','好人');
gbk、gb2312 在mysql里还能显示汉字,可到了php里就乱码了。
php 页面里指定gbk 、gb2312也是乱码。。
都换成utf8 又不能写入汉字记录......
高手帮忙啊.....
所以,在运行insert前,需要set names gbk, 也就是把你的
character_set_client, character_set_connection , character_set_results 设为了gbk. 在你的php程序里,一样要根据你的输入输出编码决定是要set names gbk还是utf8.
ERROR 1366 (HY000): Incorrect string value: '\xCE\xD2' for column 'Nam' at row 1
可知,插入的是 gbk 编码的数据当然,你在命令窗口也只能输入 gbk 编码的内容但你的补充说明里告知表是 utf8 编码的
所以你在插入前需执行一次,语言声明
mysql> set names gbk
mysql> insert person(Nam,Ifo) values('我','好人');
MySQL 中文显示乱码