mysql“ datetime not null默认值'1970-01-01'”变为0000-00-00 00:00:00
-
01-10-2019 - |
题
我有一个列创建为
`date_start` datetime NOT NULL DEFAULT '1970-01-01'
但是,当我将来自CSV文件的数据与加载数据命令上传时,带有空白条目 date_start
保存的值是0000-00-00 00:00:00?
解决方案
MySQL SQL模式默认情况下允许零日期。
我的信念是,加载数据填充命令正在读取打算是DateTime的空白位置,并在插入之前自动使用零日期。这可以解释为什么未应用您的默认约束 - 插入时值并非null。
我认为您有两个选择:
- 将您的CSV中的所有空白从“,”,“ null”,“ null”或“,默认”更新,以便将它们正确解释
- 更改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'
不隶属于 StackOverflow