我有一个列创建为

`date_start` datetime NOT NULL DEFAULT '1970-01-01'

但是,当我将来自CSV文件的数据与加载数据命令上传时,带有空白条目 date_start 保存的值是0000-00-00 00:00:00?

有帮助吗?

解决方案

MySQL SQL模式默认情况下允许零日期。

我的信念是,加载数据填充命令正在读取打算是DateTime的空白位置,并在插入之前自动使用零日期。这可以解释为什么未应用您的默认约束 - 插入时值并非null。

我认为您有两个选择:

  1. 将您的CSV中的所有空白从“,”,“ null”,“ null”或“,默认”更新,以便将它们正确解释
  2. 更改SQL模式: SET SQL_MODE='NO_ZERO_DATE'

其他提示

NULL 在MySQL中,“空白条目”并不总是相同的。如果是 datetime 数据类型,空白条目会自动转换为0000-00-00 00:00:00。您可以将其视为一种打字形式,其中空白的打字为零。

在数据文件中,尝试用 DEFAULT 关键词。

datetime 表示您的专栏以格式存储日期和时间 Y-m-d H:i:s (0000-00-00 00:00:00).

date 表示您的专栏存储仅以格式日期 Y-m-d (0000-00-00).

如果在插入数据时未指定值,则使用默认值,但是当您从CSV文件中插入数据时,它确实为字段指定了一个值,因此不使用默认值。

空白条目是DateTime字段的无效值,因此值 0000-00-00 00:00:00 相反,就像无法解释到有效日期(或部分日期)的任何值一样。

MySQL具有令人讨厌的(在我看来)的行为,在某些情况下,如果给出无效的值以存储在列中,则将存储预定义的“错误值”。例如,在日期或日期环境中,它将存储您注意到的“零日期”;对于枚举列,它将存储'(在数字上下文中对应于0)作为错误值。

尽管它是不贵的,但您可以尝试进行导入并允许插入无效的零日期,然后发行

UPDATE
    table_name
SET
    date_start = '1970-01-01 00:00:00'
WHERE
    date_start = '0000-00-00 00:00:00'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top