You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何MySQL插入FLOAT(3,2)时11.1报错,1.11却正常?

MySQL FLOAT(3,2) 插入报错原因解析

首先要明确MySQL中FLOAT(M, D)的定义规则:

  • M代表总有效位数(整数部分与小数部分的位数之和)
  • D代表小数点后强制保留的位数

针对你创建的value FLOAT(3, 2)列:

  • 小数点后固定占用2位,因此整数部分最多只能有 3-2=1 位
  • 该列可存储的合法数值范围是 -9.99 到 9.99

再看两个插入操作的差异:

  • 执行INSERT INTO float_test values(1.11);时,整数位为1、小数位为2,总位数刚好3,完全符合列的定义规则,因此能正常插入
  • 执行INSERT INTO float_test values(11.1);时,MySQL会自动将数值补全为11.10(满足小数点后2位的要求),此时整数位为2、小数位为2,总位数达到4,且整数位已经超出了允许的1位上限,因此触发ERROR 1264 (22003): Out of range value for column 'value' at row 1错误

内容的提问来源于stack exchange,提问作者rpicoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:49:50