MySQL 5.7 日期字段问题

标签 mysql sql date 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行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 语句,当你真的想往表中写入一些东西,或者检查一个条件时,MySQL 无法理解日期列类型的 ' ' 是什么。

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

我建议,将其更改为 NULL。

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

关于MySQL 5.7 日期字段问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39737396/

相关文章:

python - Unicode解码错误: 'ascii' codec can't decode byte 0x96 in position 10: ordinal not in range(128)

带有查询变量的 MySQL 子查询

sql - Elasticsearch GROUP BY列的HAVING COUNT> x

sql - 从 Powershell 执行存储过程

mysql - 按日期范围连接两个表

mysql - 查找重复的 mysql 记录并用最后一个重复值更新第一个重复项

php - fatal error mysql和登录表单

PHP - 循环结果集

python - django中的日期时间显示和时区转换

mysql - 使用 DATE_ADD 和 CURRENT_DATE 查找表中今天发生的事情