mybatis plus逻辑删除提示Data truncation: Out of range value for column ‘delete‘ at row 1

文章描述了一次尝试使用SQL语句更新数据时遇到的错误,原因是数据库设计时将delete字段设置为了无符号且填充0,导致在插入负数值时出错。解决方法是确保delete字段的int长度足够容纳可能的值。

直接使用sql语句:失败

UPDATE request_note SET `delete`=-1 WHERE id IN (5,6)  AND `delete`=0

提示报错:1264 - Out of range value for column 'delete' at row 1

我的原因:数据库设计时不小心勾选了 无符号 和填充0

注:delete字段的int长度也不能太短

解决 MySQL 中 'Data truncation: Out of range value for column 'id' at row 1' 错误的方法如下: ### 调整数据类型 若“id”列的数据类型无法容纳过大的值,可将其调整为更大范围的数据类型。以 MySQL 为例,若原本是`INT`类型,可转换为`BIGINT`类型,代码如下: ```sql ALTER TABLE your_table_name MODIFY COLUMN id BIGINT; ``` 此方法适用于数据值超出当前列类型范围的情况,例如原本使用`INT`类型(范围 -2147483648 到 2147483647),但实际插入的值超出了该范围,就可将其调整为`BIGINT`类型(范围 -9223372036854775808 到 9223372036854775807) [^2]。 ### 检查主键策略 如果使用了 MyBatis-Plus 等框架,并且配置了主键策略,如`ASSIGN_ID`(雪花算法),需要确保表字段类型与策略匹配。该策略会使用雪花算法自动生成主键 ID,主键类型为长整型或字符串(分别对应的 MySQL 的表字段为`BIGINT`和`VARCHAR`)。若不设置类型值,默认使用`IdType.ASSIGN_ID`策略(自 3.3.0 起),所以要保证表中“id”列的类型为`BIGINT`或`VARCHAR` [^3]。 ### 验证数据来源 要确认插入的“id”值是否合理,是否存在数据异常。可以对输入的数据进行过滤和验证,避免超出数据库列范围的值进入数据库。示例 Python 代码如下: ```python import re # 假设 data 是要插入的数据 data = {"id": "12345678901234567890", "name": "example"} id_value = data.get("id") if re.match(r'^\d+$', id_value): id_num = int(id_value) # 检查 id 值是否在合理范围内 if id_num <= 9223372036854775807: # 执行插入数据库操作 pass else: print("id 值超出范围") else: print("id 值不是有效的数字") ``` ### 数据分段处理 若数据值确实非常大,可以考虑将其分段存储或使用其他方式进行处理,避免单个字段超出范围。不过这种方法相对复杂,需要根据具体业务需求进行设计。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值