默认情况下,MySQL中一个数据超出类型的范围时,数据会以数据类型所充许的最大值存储。如:
1.创建表
create table person (
name varchar(20),
score tinyint
);
2.插入数据
tinyint占1个字节,默认是带符号的类型,能够表示的范围是[-128,127]。插入200时,MySQL默认情况下,并不会报错或警告,而是存储tinyint能够表示的最大值127。同理,插入-200时,存储了-128。
insert into person values('April',200);
insert into person values('April',-200);
3.查询数据
select * from person;
执行结果:
其实,在很多情况下,我们是不需要数据库如此贴心的,我们更希望它提示错误,告诉我们:插入或更新的值超出数据类型的范围,禁示修改数据。而不是默默帮我们修改数值,以达到成功插入的目的。
想要Mysql报错或警告,需要在my.cnf中添加 sq_mode=STRICT_ALL_TABLES,并重启mysql。
sql_mode=STRICT_ALL_TABLES
service mysqld restart
现在,插入超过范围的数据,MySql就会报错。
mysql> insert into person values('April',200);
ERROR 1264 (22003): Out of range value for column 'score' at row 1