2016-09-28 38 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