我有一个"bill_date"(账单日期)字段,我希望在账单开具之前为空(NULL),此时将输入日期.

我发现MySQL不喜欢datetime字段中的空值.你们有没有一个简单的方法来处理这个问题,或者我是不是被迫使用最小日期作为"空类似功能",然后判断那个日期?

谢谢

EDITED TO ADD:

好的,我确实看到MySQL会接受空值,但如果我使用PHP更新记录,它不会接受它作为数据库更新.

变量名为$bill_date,但如果我更新记录而不将值发送到$bill_date,它不会将变量保留为NULL——我得到以下错误:

Database query failed: Incorrect datetime value: '' for column 'bill_date' at row 1

我假设我需要实际发送NULL这个词,或者将其完全排除在更新查询之外,以避免这个错误?我说得对吗?谢谢

推荐答案

MySQL does允许datetime个字段有NULL个值.我刚刚测试过:

mysql> create table datetimetest (testcolumn datetime null default null);
Query OK, 0 rows affected (0.10 sec)

mysql> insert into datetimetest (testcolumn) values (null);
Query OK, 1 row affected (0.00 sec)

mysql> select * from datetimetest;
+------------+
| testcolumn |
+------------+
| NULL       | 
+------------+
1 row in set (0.00 sec)

我使用的是这个版本:

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.0.45    | 
+-----------+
1 row in set (0.03 sec)

编辑#1:我在您的编辑中看到,您在PHP中收到的错误消息表明您正在传递一个空字符串(即''),而不是null.空字符串不同于null,并且不是有效的datetime值,这就是您收到错误消息的原因.如果这是你的意思,你必须通过特殊的sql关键字null.另外,不要在null这个词周围加引号.有关如何插入null的示例,请参见上面的insert语句.

编辑#2:你在使用PDO吗?如果是这样,当绑定null参数时,请确保在绑定null时使用[PDO::PARAM_NULL][1]类型.关于如何使用PDO正确插入null,请参见answer to this stackoverflow question.

Mysql相关问答推荐

了解查询中ORDER BY的行为

MySQL RDS ALTER TABLE ENUM短暂中断了我的数据库连接

MySQL有没有办法直接从CSV文件中读取而不是导入它?

使用JSON_CONTAINS搜索多个值的原理

约会时的意外行为

数组上的MySQL、JSON_CONTAINS用法

在MySQL CLI中,是否有自动完成过程的方法?

在 MySQL 中,如何对 LIKE 查询进行批量更新,删除字符?

使用 autocommit = 0 和 InnoDB 表的 LOCK TABLES 检测死锁

如何让连续 3 周或以上的用户有订单?

此更新查询是否有任何可能的重写选项?

带有 PARTITION BY 子句的 ROW_NUMBER() 停止在 MariaDB 上工作

MySQL UPDATE 锁会因为连续的 SHARE 锁而饿死吗?

将 Django DB 从 SQLite 迁移到 MySQL 的最佳方法是什么?

在 MySQL 中检测 utf8 损坏的字符

你如何 OR 两个 LIKE 语句?

MySQL - 基于同一表中的行求和列值

错误:无法构建 gem 本机扩展(rails 3.2.3 上的 mysql2)

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #3 不在 GROUP BY 子句中并且包含非聚合

从 MySQL JSON 数据类型中提取不带引号的值