MySQL 5.7 日期字段问题
MySQL 5.7 date field trouble
我最近安装了 MySQL 5.7。日期列发生了一些奇怪的事情。
如果我在 WHERE 部分使用该字段执行 SELECT 查询,我有一个结果集,但是当我使用相同的 WHERE 条件更新一行时,我得到一个 无效的日期格式错误信息。
这是SELECT的句子:
SELECT *
FROM
FDpoCargTran
WHERE FDpoCargTran.Banco = '001'
AND (FDpoCargTran.Conciliacion = '' OR FDpoCargTran.Conciliacion IS NULL)
AND FDpoCargTran.Fecha = '2016-09-27'
这句话returns2行resultset,没问题
现在,这是更新语句:
UPDATE
FDpoCargTran
SET
Edo = 'C'
WHERE FDpoCargTran.Banco = '001'
AND (FDpoCargTran.Conciliacion = '' OR FDpoCargTran.Conciliacion IS NULL)
AND FDpoCargTran.Fecha = '2016-09-27'
AND Deposito = 1041
我收到此错误消息:
Data truncation: Incorrect date value: '' for column 'Conciliacion'
Conciliacion 列定义为:
`Conciliacion` date DEFAULT NULL,
如果我删除 Conciliacion = '' 条件,一切正常。
为什么空字符串对 UPDATE 语句中的列求值无效而不是 SELECT 中的列求值?
拜托,出出主意!!!
Basically, for date
datatype, you cannot store something like White
Spaces or ' ' strings. You need to make the column to accept NULL
values and insert an actual NULL into it. This is not a problem in MySQL 5.7, its how date
is set in databases.
Update 是一个 DML 语句,当你真正想写东西到 table 中,或者检查一个条件时,MySQL 无法理解日期列类型的 ' ' 是什么。
因此,您不能设置“ ”,而可以设置 NULL
。这就是 MySQL 可以检查条件并进行适当更改的方式!!
我建议,将其更改为 NULL。
- 将您的日期时间列更改为 varchar。
- 导入任何内容 table/database。
- 更新 FDpoCargTran 设置 Conciliacion=NULL,其中 Conciliacion='';
- 将列改回日期时间。
我最近安装了 MySQL 5.7。日期列发生了一些奇怪的事情。
如果我在 WHERE 部分使用该字段执行 SELECT 查询,我有一个结果集,但是当我使用相同的 WHERE 条件更新一行时,我得到一个 无效的日期格式错误信息。
这是SELECT的句子:
SELECT *
FROM
FDpoCargTran
WHERE FDpoCargTran.Banco = '001'
AND (FDpoCargTran.Conciliacion = '' OR FDpoCargTran.Conciliacion IS NULL)
AND FDpoCargTran.Fecha = '2016-09-27'
这句话returns2行resultset,没问题
现在,这是更新语句:
UPDATE
FDpoCargTran
SET
Edo = 'C'
WHERE FDpoCargTran.Banco = '001'
AND (FDpoCargTran.Conciliacion = '' OR FDpoCargTran.Conciliacion IS NULL)
AND FDpoCargTran.Fecha = '2016-09-27'
AND Deposito = 1041
我收到此错误消息:
Data truncation: Incorrect date value: '' for column 'Conciliacion'
Conciliacion 列定义为:
`Conciliacion` date DEFAULT NULL,
如果我删除 Conciliacion = '' 条件,一切正常。
为什么空字符串对 UPDATE 语句中的列求值无效而不是 SELECT 中的列求值?
拜托,出出主意!!!
Basically, for
date
datatype, you cannot store something like White Spaces or ' ' strings. You need to make the column to accept NULL values and insert an actual NULL into it. This is not a problem in MySQL 5.7, its howdate
is set in databases.
Update 是一个 DML 语句,当你真正想写东西到 table 中,或者检查一个条件时,MySQL 无法理解日期列类型的 ' ' 是什么。
因此,您不能设置“ ”,而可以设置 NULL
。这就是 MySQL 可以检查条件并进行适当更改的方式!!
我建议,将其更改为 NULL。
- 将您的日期时间列更改为 varchar。
- 导入任何内容 table/database。
- 更新 FDpoCargTran 设置 Conciliacion=NULL,其中 Conciliacion='';
- 将列改回日期时间。