這是一個明智的觀點。
空日期不是零日期。他們可能看起來一樣,但他們不是。在mysql中,空日期值爲空。零日期值是一個空字符串('')和'0000-00-00 00:00:00'
無效日期「...其中mydate =''」將失敗。
在空/零日期「...其中mydate爲空」將失敗。
但現在讓我們變得時髦。在mysql日期中,空/零日期是嚴格相同的。
通過示例
select if(myDate is null, 'null', myDate) as mydate from myTable where myDate = '';
select if(myDate is null, 'null', myDate) as mydate from myTable where myDate = '0000-00-00 00:00:00'
都將輸出: '0000-00-00 00:00:00'。如果使用''或'0000-00-00 00:00:00'更新myDate,那麼兩個選擇仍然會一樣。
在php中,mysql空日期類型將被標準的mysql連接器所尊重,並且是真正的空值($ var === null,is_null($ var))。空日期將始終表示爲'0000-00-00 00:00:00'。
我強烈建議只使用空日期,如果可以的話只使用空日期。 (一些系統將使用「virual」零日期,這是有效的公曆日期,例如1970-01-01(linux)或0001-01-01(oracle)。
空的日期在php/mysql中更容易。 '沒有'where field is null'來處理,但是你必須在''中手動轉換'0000-00-00 00:00:00'的日期以顯示空白字段(存儲或搜索你沒有特殊的情況下處理零日期,這是很好的)。
空日期需要更好的照顧,你必須小心,當你插入或更新不添加引號周圍null,否則零日期將是插入而不是null,這會導致您的標準數據混亂。在搜索表單中,您將需要處理諸如「and mydate is not null」之類的情況,依此類推。
空日期通常是更多的工作。但它們比查詢的零日期快得多。
MySQL是否接受日期時間定義的空值,但如果由於某種原因認爲否則不會使用空值,可以考慮簡單地使用'1000-01-01'作爲值並排除行在您的查詢中爲您的bill_date列提供該值。 – BraedenP
Mysql在datetime字段中允許空值。我懷疑問題來自您訪問mysql的方式。你能用你用來訪問數據的機制來編輯你的問題嗎?例如,你使用我的ODBC,使用Perl庫等? – anschauung
使用PHP - 查看我上面的編輯。 – rhodesjason