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

标签 mysql zend-framework pdo zend-db

我在 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/

相关文章:

sql - 在 MySql 中,如果我在列表中传递重复 ID,如何获得行重复?

MySQL SUM 更新超过 4 个表

mysql - 如何在mysql/zend框架中存储和处理货币

php - 为什么 {if row exist then fetch them} 不起作用?

php - Ajax 通过 php 获取价格

php - 使用 PDO 调用带有 Out 参数的存储过程

mysql - SQL - 有什么方法可以简单计算吗?

mysql - mysql 中的 order by 和其间的随机

mysql - 采埃孚 "Object of class Zend_Db_Table_Rowset could not be converted to string"

添加名称和 Skus 列时,Magento 销售订单网格显示不正确的记录数