MySql数据超出范围的处理
默认情况下,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