MySQL Incorrect decimal (integer) value: ”错误解决方法

MySQL Incorrect decimal (integer) value: ”错误解决方法

问题描述

在使用MySQL中,有可能会遇到以下错误信息:

Error Code: 1366. Incorrect decimal value: '' for column 'XXX' at row 1
Mysql

这个错误信息告知我们,试图将一个空值 ” 赋值给字段 XXX,但是列的类型是 decimal 类型,会导致错误。

类似的错误也可能会在其它数据类型时发生,比如整型 int 类型。例如:

Error Code: 1292. Incorrect integer value: '' for column 'XXX' at row 1
Mysql

本文会解释这样的错误发生的原因,并提供解决方法。

阅读更多:MySQL 教程

原因分析

这个错误的原因是我们在使用decimal类型或int类型时,应该为数值类型提供一个有效的值。而 ” 并不是有效的数值。因此,如果我们尝试将一个空值 ” 插入到numeric 类型的字段中,就会触发这样的错误。

同时,使用 MySQL 5.7 或更新版本时,输入空字符串也会触发另一个错误:

Error Code: 1366. Incorrect integer value: '' for column 'XXX' at row 1
Mysql

解决方法

方法1: 设置默认值

一种方法是在创建表时,设置一个默认值,这个默认值将在插入时,如果没有匹配的值提供的情况下被使用。例如,我们可以将”转换为0来代替。

CREATE TABLE `mytable` (
  `ID` INT(10) NOT NULL,
  `money` DECIMAL(10, 2) DEFAULT '0.00',
  PRIMARY KEY (`ID`)
);
SQL

这样,当使用 INSERT INTO 语句时,即使在不提供值的情况下,也会使用默认值:

INSERT INTO mytable(ID) VALUES (1);

SELECT * FROM mytable;
SQL

这个查询会输出以下内容:

+----+-------+
| ID | money |
+----+-------+
|  1 |  0.00 |
+----+-------+
Mysql

方法2: 解析问题并修复

另一个方法是确认哪个列在插入空值时会触发这个问题,并根据此调整数据。

例如,对于以下表:

CREATE TABLE `mytable` (
  `id` INT(10) NOT NULL auto_increment,
  `name` VARCHAR(100),
  `score` DECIMAL(10, 2),
  PRIMARY KEY (`id`)
);
SQL

如果我们尝试插入空值:

INSERT INTO mytable(name, score) VALUES('john', '');
SQL

Error Code: 1366. Incorrect decimal value: ” for column ‘score’ at row 1

名为“score”的列正在尝试插入一个空值,这个列的类型是 decimal。我们需要提供一个有效的值来替代”,可以是0、NULL或其他值,具体取决于具体的情况。

总结

本文讨论了MySQL中 “Error Code: 1366. Incorrect decimal value: ” for column ‘XXX’ at row 1″ 和 “Error Code: 1292. Incorrect integer value: ” for column ‘XXX’ at row 1″ 错误,这样的错误会在尝试将一个空值 ” 赋值给 numeric 类型的字段时发生。我们提供了两个解决方法,一种是为数值类型提供默认值,另外一种是分析问题,并在插入之前修复问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册