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

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.dtcms.com/a/335300.html

相关文章:

  • 第三十七天(js前端数据加密和混淆)
  • Fixture Caliper 工具
  • GRPO(Group Relative Policy Optimization)公式速览
  • Scala面试题及详细答案100道(11-20)-- 函数式编程基础
  • 嵌入式软件架构设计之九: 双机通信之通信方式
  • 排列与组合
  • 超详细yolov8/11-obb旋转框全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解
  • STM32标准库学习笔记
  • MM-Spatial和Spatial-MLLM论文解读
  • 【力扣-多数元素 JAVA/Python】
  • CD4+ T细胞激活区分抗PD-L1联合抗CTLA4疗法与单药抗PD-L1治疗的响应差异-空间最近邻分析
  • 民法学学习笔记(个人向) Part.5
  • 【最后203篇系列】032 OpenAI格式调用多模型实验
  • 39.离散化与哈希
  • 数据结构:二叉树的遍历 (Binary Tree Traversals)
  • 杂记 03
  • v-scale-scree: 根据屏幕尺寸缩放内容
  • 基于Python的电影评论数据分析系统 Python+Django+Vue.js
  • 防御保护12-14
  • tmux常用命令
  • Flamingo
  • KingbaseES主备读写分离集群安装教程
  • 字节数据流
  • 北汽新能源半年报:双品牌战略拉动销量增长,多元布局促进转化
  • PIDGen!DecodeProdKey函数分析之四个断点
  • 【大模型应用开发 3.RAG技术应用与Faiss向量数据库】
  • 【leetcode】12. 整数转罗马数字
  • 关于“双指针法“的总结
  • 【Python】Python爬虫学习路线
  • “openfeign“调用接口上传文件报错:Failed to deleted temporary file used for part [file]