当前位置: 首页 > ai >正文

MySQL 插入数据提示字段超出范围?一招解决 DECIMAL 类型踩坑

MySQL 插入数据提示字段超出范围?一招解决 DECIMAL 类型踩坑

在日常数据库操作中,我们经常会遇到各种字段类型相关的问题。今天就来聊聊一个常见的错误:插入数据时提示字段值超出范围,以实际案例带你搞懂 MySQL 中 DECIMAL 类型的使用要点。

问题场景再现

先看一下我创建表和插入数据的操作:

-- 创建商品表
CREATE TABLE mini_product (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL,price DECIMAL(6,2)
) ENGINE=InnoDB;-- 插入商品数据
INSERT INTO mini_product (name, price) VALUES
('iPhone', 6999.00),
('小米电视', 3299.00),
('华为耳机', 899.00),
('联想笔记本', 5699.00),
('大疆无人机', 7999.00),
('Kindle', 998.00),
('Switch', 2099.00),
('索尼相机', 12999.00),  -- 此行报错
('机械键盘', 599.00),
('移动硬盘', 699.00);

执行后,数据库直接抛出错误:

ERROR 1264 (22003): Out of range value for column ‘price’ at row 8

错误原因分析

这个错误的根源在于price字段的类型定义 ——DECIMAL(6,2)。

DECIMAL 类型的格式是DECIMAL(M,D),其中:

  • M表示总位数(整数部分 + 小数部分),范围 1-65

  • D表示小数部分的位数,范围 0-30,且D ≤ M

对于DECIMAL(6,2)来说:

  • 总位数是 6 位

  • 小数部分固定占 2 位

  • 因此整数部分最多只能有 4 位(6-2=4)

  • 最大可存储的值为 9999.99

而第 8 行数据中,“索尼相机” 的价格是 12999.00,整数部分有 5 位(12999),明显超过了DECIMAL(6,2)能容纳的最大整数位数(4 位),所以导致了超出范围的错误。

解决办法

只需要调整price字段的精度,使其能够容纳更大的数值。

根据我们的数据,最大价格是 12999.00,整数部分有 5 位,小数部分 2 位,所以总位数至少需要 7 位(5+2=7)。

执行以下 SQL 语句修改表结构:

ALTER TABLE mini_product MODIFY COLUMN price DECIMAL(7,2);

修改后,DECIMAL(7,2)表示:

  • 总位数 7 位

  • 小数部分 2 位

  • 整数部分最多 5 位

  • 最大可存储的值为 99999.99,足以容纳 12999.00

此时再重新执行插入语句,就能成功插入所有数据了。

扩展知识:DECIMAL 类型使用建议

  1. 根据实际业务数据范围选择合适的精度,既不要过大(浪费存储空间),也不要过小(无法存储有效数据)

  2. 对于价格、金额等精确数值,优先使用 DECIMAL 类型,避免使用 FLOAT/DOUBLE(可能存在精度丢失问题)

  3. 设计表结构时,预估可能的最大数值,给字段预留一定的扩展空间

  4. 常见场景参考:

    • 小额商品价格:DECIMAL (6,2)(最大 9999.99)
    • 中额商品价格:DECIMAL (8,2)(最大 999999.99)
    • 大额交易金额:DECIMAL (10,2)(最大 99999999.99)

掌握 DECIMAL 类型的使用要点,能帮你避免很多数据存储相关的问题,让数据库设计更合理、更健壮。

http://www.xdnf.cn/news/17973.html

相关文章:

  • 安卓11 12系统修改定制化_____修改运营商版本安装特定应用时的默认规则
  • 机器学习相关算法:回溯算法 贪心算法 回归算法(线性回归) 算法超参数 多项式时间 朴素贝叶斯分类算法
  • 一文速通Python并行计算:14 Python异步编程-协程的管理和调度
  • C语言:文件操作详解
  • 后量子密码算法SLH-DSA介绍及开源代码实现
  • Java8~Java21重要新特性
  • C++ 最短路Dijkstra
  • CodeBuddy IDE深度体验:AI驱动的全栈开发新时代
  • Maven下载和配置-IDEA使用
  • 【算法】——力扣hot100常用算法技巧
  • 使用IntersectionObserver实现页面右侧运营位区域固定,和页面列表数据分页加载
  • JetPack系列教程(七):Palette——让你的APP色彩“飞”起来!
  • 【大语言模型 02】多头注意力深度剖析:为什么需要多个头
  • 后量子密码算法ML-DSA介绍及开源代码实现
  • 【DL学习笔记】常用数据集总结
  • 微服务架构实战指南:从单体应用到云原生的蜕变之路
  • 56. 合并区间
  • 【Java基础面试题】数据类型
  • PAT乙级_1085 PAT单位排行_Python_AC解法_含疑难点
  • C语言(11)—— 数组(超绝详细总结)
  • C++基础——内存管理
  • QT基础入门
  • Tomcat Server 组件原理
  • 肖臻《区块链技术与应用》第23-26讲 - The DAO事件、BEC事件、反思和总结
  • select、poll 和 epoll
  • RK3568 NPU RKNN(二):RKNN-ToolKit2环境搭建
  • Java应届生求职八股(5)---并发编程篇
  • 【OpenGL】LearnOpenGL学习笔记10 - 平行光、点光源、聚光灯
  • ZCU国产化方案选型,哪家物料更齐全
  • 图像相似度算法汇总及Python实现