我在 Zend_Db
或 PHP 的 PDO MySQL 驱动程序中遇到了一个看起来很奇怪的问题,这可能是因为我对这两者缺乏了解。
假设我有一个带有 NULL
able 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');
那应该行得通。我测试了它。
警告
如果数据类型time 是NOT 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_MODE
到 STRICT_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/