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
经验分享 程序员 微信小程序 职场和发展