MySql数据超出范围的处理

本文探讨了MySQL中数据超出类型范围的默认处理方式及如何通过配置sql_mode为STRICT_ALL_TABLES使数据库在遇到此类情况时抛出错误。默认情况下,MySQL会自动将超出范围的值调整为该类型的最大或最小值,但这种行为可能掩盖数据问题。通过更改设置,可以增强数据完整性检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    默认情况下,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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值