Home > Backend Development > PHP Tutorial > mysql为何不能插入数据?

mysql为何不能插入数据?

WBOY
Release: 2016-06-23 14:04:22
Original
1155 people have browsed it

安装AppServ后首次使用mysql,没有图形界面,在“MySql Command Line Client”的操作如下:
======================================================================================
mysql>  create database cars;
Query OK, 1 row affected (0.00 sec)

mysql>  use cars;
Database changed
mysql>  create table cars(id int,xm char(8),h char(8),vin char(20));
Query OK, 0 rows affected (0.06 sec)

mysql>  insert into cars(id,xm,h,vin) values(1,'廉东方','豫A5F568','LDC666L2980790000');
Query OK, 1 row affected, 1 warning (0.02 sec)

mysql>  select * from cars;
+------+------+----------+-------------------+
| id   | xm   | h        | vin               |
+------+------+----------+-------------------+
|    1 |      | 豫A5F568  | LDC666L2980790000 |
+------+------+----------+-------------------+
1 rows in set (0.02 sec)

mysql>  select xm from cars;
+------+
| xm   |
+------+
|      |
+------+
1 rows in set (0.00 sec)

mysql>  update cars set xm='廉' where id=1;
Query OK, 0 rows affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 0  Warnings: 0

为何不能设置xm字段的值?为何无法更新?谢谢啦~~~


回复讨论(解决方案)

mysql>  \W
Show warnings enabled.
mysql>  update cars set xm='廉东方' where id=1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed:  0  Warnings: 0

Warning (Code 1366): Incorrect string value: '\xC1\xAE\xB6\xAB\xB7\xBD' for colu
mn 'xm' at row 1
mysql>  _

这里看插入数据的长度是6个字节,不到设计的8个字节,怎么就错了呢?


mysql>  set names utf-8;
ERROR 1115 (42000): Unknown character set: 'utf'
mysql>  set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql>  update cars set xm='廉' where id=1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

Warning (Code 1366):  Incorrect string value: '\xC1\xAE' for column 'xm' at row 1

mysql>  _


还是不行,快急死了~~~


mysql> insert into cars(id,xm,h,vin) values(1,'廉东方','豫A5F568','LDC666L298079
0000');
Query OK, 1 row affected (0.00 sec)

mysql> select * from cars;
+------+--------+----------+-------------------+
| id   | xm     | h        | vin               |
+------+--------+----------+-------------------+
|    1 | 廉东方 | 豫A5F568 | LDC666L2980790000 |
+------+--------+----------+-------------------+
1 row in set (0.00 sec)


说一下你用的什么操作系统

刚开始学php,嫌配置麻烦,下个 appserv-win32-2.6.0.exe 直接安装的。

难道它安装的不合理?

电脑安装的是win7操作系统~~~

先执行 set names gbk; 应该就可以了

先执行 set names gbk; 应该就可以了

刚才查资料,有的说用:set names utf8;经测试不行,

但“set names gbk;”确实成功了,非常感谢!

能简单说一下为什么吗?

你 #1 的内容是我在#3回复后才看到的,不然一开始就解释了

\xC1\xAE\xB6\xAB\xB7\xBD 是 廉东方 的gbk 内码
而他却报错了,这说明你的数据库的默认字符集不是 latin1 的,也不是 gbk 的
那么对中文报错就只能是 utf8 的了(极少有人用 ucs-2 的,就算是也没关系)

对 utf8 字段插入 gbk 字符当然就要报错了
所以要 set names gbk 通知 mysql 现在用的是 gbk 字符

那么“豫”为什么没有报错呢?
这就要看 utf-8 是如何编码的了:
U+007F  0xxxxxxx
U+07FF   110xxxxx  10xxxxxx
U+FFFF  1110xxxx 10xxxxxx 10xxxxxx
U+1FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U+3FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U+7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

豫 的gbk二进制内码为  11010100  10100101
正好符合 U+07FF 编码规则,所以他就不会报错

谢谢您的耐心回答,收获匪浅~~~

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template