mysql - 错误 #1265 - 无法在默认 'none' 字段中插入空值

标签 mysql datetime null mariadb default-value

我正在尝试通过 phpMyAdmin 到一个名为“date_end”的表中进行简单的插入,该列的值为“DATETIME”,默认值设置为“none”(因此,如果在插入时,在 INSERT 行中它是空的) ,该字段不应以值结尾),当我尝试插入如下内容时:

INSERT INTO `tasks` 
            (`id`, `customer`, `technician`, `date_start`, `date_end`, `description`) 
    VALUES (NULL, '', '', '', '', '');

我收到以下错误:#1265 - 截断了第 1 行“date_end”列的数据,然后为“data_start”和“data_end”插入的值为“0000-00-00” 00:00:00' 而不是空字段(仅当 INSERT 语句中的 'date_start' 和/或 'date_end' 为空时才会发生这种情况)。

我已经从Wamp更改为Xampp,在Wamp中,这没有发生,所以我猜想这与mysql配置有关?我不确定。

我正在使用 MariaDB 10.1.37(我认为这是问题所在)以及 PHP 7.3.0 和 apache 2.4.37。

最佳答案

在 MySQL/MariaDB 中,日期字段不能包含空字符串。默认情况下,如果没有 SQL 严格模式,它们会将它们转换为零日期,这仍然是一个日期,尽管无效,而不是空字符串。您可以将日期字段设置为 NULL,如果值未知则传递 NULL。
Since MariaDB version 10.2.4 ,他们默认启用了 SQL 严格模式,该模式不再允许将空日期插入到数据库中。 Read more about SQL strict mode

If strict mode is enabled, '0000-00-00' is not permitted and inserts produce an error, unless IGNORE is given as well. For INSERT IGNORE and UPDATE IGNORE, '0000-00-00' is permitted and inserts produce a warning.

通过 phpMyAdmin 使用此 SQL 检查您的 MariaDB SQL 模式:SELECT @@global.sql_mode;
如果设置包含 STRICT_ALL_TABLESSTRICT_TRANS_TABLES,则启用严格模式。

关于mysql - 错误 #1265 - 无法在默认 'none' 字段中插入空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54187352/

相关文章:

PHP函数获取日期格式?

java - 比较小时和分钟

sql - 使用 Null 值更新列

mysql - Wordpress 如何将帖子链接到其数据库中的类别?

mysql - MATCH() AGAINST() 问题

php - Android中通过PHP和Mysql登录

c++ - #define NULL 空

java - 在Where子句中插入字符串变量

c# - 我如何在 python 中反序列化 C# datetime?

php - null 和 empty 和有什么不一样?