gpt4 book ai didi

mysql - 警告超出条件更新的值列范围

转载 作者:行者123 更新时间:2023-11-29 09:56:33 25 4
gpt4 key购买 nike

我有一个查询来更新表,并且一些字段应该在条件下更新,让我们想象一下这种情况:

我有一个名为mytable的表,它有一个名为installedDATETIME字段,该字段可以为空,并且默认为空,有时某些值为“0000-00-00 00:00:00”。

当我从任何传感器获取数据(例如:传感器 id 12457)时,我会像这样更新其值:

UPDATE mytable SET
temperature=35,
pressure=122,
installed=NOW(),
status=1
WHERE id=12457

如果我从同一个传感器获得新数据,我会再次存储其值,但我会避免以这种方式更改安装的值:

UPDATE mytable SET
temperature=35,
pressure=122,
installed=IF(installed IS NULL,NOW(),installed),
status=1
WHERE id=12457

它按预期工作,如果安装为空,则存储当前时间,如果不是,则保留之前的日期,但当日期为“0000-00-00 00:00:00”时,我收到此警告:

警告:第 1 行“已安装”列的值超出范围

按照D-Shih的建议,我尝试使用 COALESCE 如下,但我得到了相同的警告:

installed=COALESCE(installed,NOW())

我认为这是因为前一个日期,所以,我尝试故意这样做重现错误:

UPDATE mytable SET
installed=installed,
WHERE id=12457

但我没有收到任何警告。

系统工作正常,但我有点好奇,为什么我仅使用 IF(或 COALESCE)函数收到此警告?

<小时/>

回答Madhur Bhaiya:

显示创建表 mytable

CREATE TABLE `mytable` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`temperature` INT(11) NOT NULL DEFAULT '0',
`pressure` INT(11) NOT NULL DEFAULT '0',
`installed` DATETIME NULL DEFAULT NULL,
`status` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)

示例数据:

INSERT INTO `mytable` VALUES (12457, 35, 122, '2018-12-12 12:53:49', 1);
INSERT INTO `mytable` VALUES (12458, 40, 119, '0000-00-00 00:00:00', 1);
INSERT INTO `mytable` VALUES (12459, 34, 122, null, 1);
INSERT INTO `mytable` VALUES (12460, 36, 122, '2018-12-12 12:57:01', 1);

MySQL版本:5.7.23

最佳答案

installed 列中也有 0000-00-00 00:00:00 作为值。除了 null 值之外,您还需要处理它们。此外,在运行查询之前,您需要将 sql_mode 设置为 '',因为它将删除更严格的 NO_ZERO_DATE SQL 模式。

SET SESSION sql_mode = '';

UPDATE mytable
SET
temperature = 35,
pressure = 122,
installed = IF(installed IS NULL OR installed = '0000-00-00 00:00:00',
NOW(),
installed),
status=1
WHERE id=12457

关于mysql - 警告超出条件更新的值列范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com