我正在尝试通过phpMyAdmin将一个简单的INSERT插入到一个名为'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配置有关吗?我不确定。
我在PHP 7.3.0和apache 2.4.37中使用MariaDB 10.1.37(我认为是问题所在)。
最佳答案
在MySQL / MariaDB中,日期字段不能包含空字符串。默认情况下,没有SQL严格模式,它们会将它们转换为零日期,尽管无效,但仍将是一个日期,而不是空字符串。您可以将日期字段设置为NULL,如果值未知,则传递NULL。
Since MariaDB version 10.2.4,它们默认情况下启用了SQL严格模式,该模式不再允许将空日期插入数据库。
Read more about SQL strict mode
如果启用了严格模式,则除非也给出IGNORE,否则不允许使用“ 0000-00-00”,并且插入会产生错误。对于INSERT IGNORE和UPDATE IGNORE,允许使用“ 0000-00-00”,并且插入会产生警告。
通过phpMyAdmin使用此SQL检查您的MariaDB SQL模式:SELECT @@global.sql_mode;
如果设置包含STRICT_ALL_TABLES
或STRICT_TRANS_TABLES
,则启用严格模式。