mysql 插入不了数据_mysql为何不能插入数据?

安装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 编码规则,所以他就不会报错

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

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值