【问题标题】:MySQL 5.7 date field troubleMySQL 5.7 日期字段问题
【发布时间】:2017-02-05 20:05:27
【问题描述】:

我最近安装了 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 语句中评估列无效?

请给个主意!!!

【问题讨论】:

  • 你的表中有Conciliacion = '' 的数据吗?我看到定义为 date default null 的列,这意味着您可以有一个有效的日期或 null 并且 不是空字符串
  • 否,只有日期值或空值。

标签: mysql sql date mysql-5.7


【解决方案1】:

基本上,对于date 数据类型,你不能存储像 White 这样的东西 空格或 ' ' 字符串。您需要使列接受 NULL 值并在其中插入一个实际的 NULL。这在 MySQL 5.7 中不是问题,date 是如何在数据库中设置的。

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

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

我建议,将其更改为 NULL。

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

【讨论】:

  • 谢谢你的回答,我会按照你写的步骤。在该表中只有日期值或 null,没有空字符串。 ;-)
  • 感谢和欢迎 :)
猜你喜欢
  • 2019-09-23
  • 2019-01-21
  • 2016-02-21
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多