gpt4 book ai didi

mysql - 使用 Zend_Db 将 TIME 字段设置为 NULL

转载 作者:可可西里 更新时间:2023-11-01 08:52:46 26 4
gpt4 key购买 nike

我在 Zend_Db 或 PHP 的 PDO MySQL 驱动程序中遇到了一个看起来很奇怪的问题,这可能是因为我对这两者缺乏了解。

假设我有一个带有 NULLable TIME 字段的 MySQL 表。如果我在 MySQL 客户端中运行这样的查询:

UPDATE mytable SET mytime = NULL WHERE id = 1;

一切都按预期工作,mytime 字段将在该查询后保持 NULL 作为值。

但是,如果我通过 Zend_Db_Adapter 在 PHP 中运行完全相同的查询,mytime 字段将设置为 '0:0:0' 在这样的查询之后:

$db->getConnection()->exec('UPDATE mytable SET mytime = NULL WHERE id = 1');

如何将该 TIME 字段设置为 NULL?

我正在使用 PHP5.3 和 PDO MySQL 驱动程序、Zend Framework 1.11 和 MySQL 5.1。

最佳答案

您所拥有的应该可以工作,即:

$db->getConnection()->exec('UPDATE mytable SET mytime = NULL WHERE id = 1');

那应该行得通。我测试了它。

警告

如果数据类型timeNOT NULL,那么尝试将其设置为NULL 将导致值NULL 默认为 00:00:00,这可能是意外行为,例如:

CREATE TABLE `test` (
`time` datetime NOT NULL
);

尝试使用 NULL 插入或更新上面的时间字段将导致插入值 00:00:00

这与日期、日期时间和其他一些数据类型类似。例如尝试将数据类型 datetime 设置为 NOT NULL NULL 将默认其值为 0000 -00-00 00:00:00

注意:当您尝试将 NULL 值设置为 NUT NULL 数据类型时,Mysql 不会抛出错误,您可以通过设置更改此行为MySQL 的 SQL_MODESTRICT_ALL_TABLES:参见 this stackoverflow question .

修复

更改字段以允许 NULL,它应该没问题:

CREATE TABLE `test` (
`time` datetime DEFAULT NULL
);

现在可以将时间字段设置为NULL

关于mysql - 使用 Zend_Db 将 TIME 字段设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366996/

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