MySQL 5.7日期字段麻烦

时间:2016-09-28 03:08:47

标签: mysql sql date mysql-5.7

我最近安装了MySQL 5.7。使用日期栏发生了一些奇怪的事情。

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

这是 SELECT 句子:

JSON

这句话返回2行结果集,这没关系。

现在,这是更新句子:

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

Conciliacion 列定义为:

Data truncation: Incorrect date value: '' for column 'Conciliacion'

如果我删除 Conciliacion =' 条件,一切正常。

为什么空字符串无法用于评估UPDATE语句中的列而不是SELECT?

请一个想法!!!

1 个答案:

答案 0 :(得分:1)

  

基本上,对于true数据类型,您无法存储像White这样的内容   空格或''字符串。您需要使列接受NULL   值并在其中插入实际的NULL。这不是MySQL 5.7中的问题,它在数据库中设置date的方式。

更新是一个DML语句,当你真的想要写一些东西到表中,或检查一个条件时,MySQL无法理解日期列类型是什么。

所以,你不能拥有'',而是可以设置date。这就是MySQL如何检查条件并进行适当的更改!!

我建议,将其更改为NULL。

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