【问题标题】:Error #1265 - Can't insert an empty value in a default 'none' field错误 #1265 - 无法在默认的“无”字段中插入空值
【发布时间】:2019-06-08 18:51:43
【问题描述】:

我正在尝试通过 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(我认为这是问题所在)。

【问题讨论】:

  • 如果 date_end 将是 none/default,则根本不要传递该列,或者使用 NULL 而不是空字符串。
  • 日期时间可以保持none吗?听起来会导致错误。
  • @user3783243 我已经做了好几次了。该字段默认没有“none”值,而是一个空值。
  • 从列中删除 id。如果您不打算填充它,请从列表中省略它。
  • id列是Ai。

标签: mysql datetime null mariadb default-value


【解决方案1】:

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

如果启用了严格模式,则不允许使用“0000-00-00”并且插入会产生错误,除非也给出了 IGNORE。对于 INSERT IGNORE 和 UPDATE IGNORE,允许使用 '0000-00-00',并且插入会产生警告。

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

【讨论】:

  • 谢谢。我就是这么想的。那么,即使更新 MariaDB,我也无法将空字符串作为 DATETIME 列的值?我就是这么理解的。再次感谢您!
猜你喜欢
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 2018-03-21
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多