![](/img/trans.png)
[英]MySQL Select MIN DateTime when DateTime is set to 0000-00-00 00:00:00
[英]mysql “datetime NOT NULL DEFAULT '1970-01-01' ” gets turned to 0000-00-00 00:00:00
我创建了一个专栏
`date_start` datetime NOT NULL DEFAULT '1970-01-01'
但是,当我使用LOAD DATA命令从CSV文件上传数据时, date_start
的条目为date_start
,保存的值是0000-00-00 00:00:00?
在MySql中, NULL
和“空白条目”并不总是相同的。 对于datetime
数据类型,空白条目将自动转换为0000-00-00 00:00:00。 您可以将其视为类型转换的一种形式,其中空格将类型转换为零。
在数据文件中,尝试用DEFAULT
关键字替换所有空白日期。
datetime
表示您的列以Ymd H:i:s
( 0000-00-00 00:00:00
)格式存储日期和时间。
date
表示您的列仅以Ymd
( 0000-00-00
)格式存储日期。
如果在插入数据时未指定值,则使用默认值,但是当您从CSV文件插入数据时,它确实为该字段指定值,因此不使用默认值。
空条目是datetime字段的无效值,因此使用值0000-00-00 00:00:00
,就像无法解析为有效日期(或部分日期)的任何值一样。
默认情况下,MySQL SQL模式允许零日期。
我的信念是,LOAD DATA INFILE命令正在读取打算作为DATETIME的空白位置,并在插入之前自动使用零日期。 这可以解释为什么未应用默认约束-插入时值不为null。
我认为您有两种选择:
SET SQL_MODE='NO_ZERO_DATE'
MySQL具有恼人的行为(在我看来),在某些情况下,如果给定无效值存储在列中,它将代替存储预定义的“错误值”。 例如,在日期或日期时间上下文中,它将存储您注意到的“零日期”。 对于ENUM列,它将存储''(在数字上下文中对应于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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.