为何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
相关产品推荐
相关产品推荐

