MySQL 5.7日期字段故障

MySQL 5.7日期字段故障,mysql,sql,date,mysql-5.7,Mysql,Sql,Date,Mysql 5.7,我最近安装了MySQL 5.7。日期列出现了一些奇怪的情况 如果我在WHERE部分中使用该字段执行SELECT查询,我会得到一个结果集,但是当我使用相同的WHERE条件更新一行时,我会得到一条无效日期格式的错误消息 以下是选择的句子: SELECT * FROM FDpoCargTran WHERE FDpoCargTran.Banco = '001' AND (FDpoCargTran.Conciliacion = '' OR FDpoCargTran.Conciliacion

我最近安装了MySQL 5.7。日期列出现了一些奇怪的情况

如果我在WHERE部分中使用该字段执行SELECT查询,我会得到一个结果集,但是当我使用相同的WHERE条件更新一行时,我会得到一条无效日期格式的错误消息

以下是选择的句子:

SELECT *
FROM
  FDpoCargTran
WHERE FDpoCargTran.Banco = '001'
      AND (FDpoCargTran.Conciliacion = '' OR FDpoCargTran.Conciliacion IS NULL)
      AND FDpoCargTran.Fecha = '2016-09-27'
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
这个句子返回两行结果集,没关系

现在,这里是更新的句子:

SELECT *
FROM
  FDpoCargTran
WHERE FDpoCargTran.Banco = '001'
      AND (FDpoCargTran.Conciliacion = '' OR FDpoCargTran.Conciliacion IS NULL)
      AND FDpoCargTran.Fecha = '2016-09-27'
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` date DEFAULT NULL, 
如果我删除调解='条件,一切都会正常工作

为什么空字符串对UPDATE语句中的列而不是SELECT语句中的列无效

请,一个想法

基本上,对于
date
datatype,您不能存储类似白色的内容 空格或“”字符串。您需要使列接受NULL 值,并在其中插入实际的NULL。这在MySQL 5.7中不是问题,它是如何在数据库中设置日期的

Update是一个DML语句,当您实际想要在表中写入内容或检查条件时,MySQL无法理解日期列类型的“”是什么

因此,您不能设置“”,而是可以设置
NULL
set。这就是MySQL检查条件并进行适当更改的方式

我建议,将其更改为NULL

  • 将datetime列更改为varchar
  • 导入任何表/数据库
  • 更新FDpoCargTran set Conciliacion=NULL,其中Conciliacion=''
  • 将列改回datetime

  • 您的表格中是否有
    Conciliacion=''
    的数据?我看到定义为
    日期默认值null
    的列,这意味着您可以拥有有效的日期或null,而不是空字符串。不,只有,日期值或null。谢谢您的回答,我将按照您编写的步骤进行操作。该表中只有日期值或null,没有空字符串。;-)谢谢&欢迎:)