2016-09-28 121 views
2

我最近安装了MySQL 5.7。日期列出现奇怪的情况。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' 

这句话返回2行的结果集,这是确定。

现在,这里的UPDATE一句:

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中?

请一个想法!

+1

有没有数据表中的Conciliacion ='''在你的表中?我看到定义为'date default null'的列,这意味着你可以有一个有效的日期或null和*不是空字符串*。 –

+0

不,只有,日期值或null。 – renevillegasr

回答

1

基本上,对于date数据类型,您不能存储类似白色的空间或“'字符串。您需要让该列接受NULL 值并向其中插入一个实际的NULL值。这在MySQL 5.7中不是问题,它在数据库中设置date

更新是一个DML语句,当您实际上想要将某些东西写入表中或检查某个条件时,MySQL无法理解日期列类型是什么。

所以,你不能有'',而是你可以有NULL设置。这就是MySQL如何检查条件并做出适当修改!

我会建议,将其更改为NULL。

  1. 将datetime列更改为varchar。
  2. 导入任何表/数据库。
  3. 更新FDpoCargTran set Conciliacion = NULL其中Conciliacion ='';
  4. 将列更改回日期时间。
+1

谢谢你的回答,我会按照你写的步骤。在该表中只有日期值或空值,没有空字符串。 ;-) – renevillegasr

+0

谢谢,欢迎:) – Jordon