各位大大好,我來請教mysql的sql_mode設定值用法,我是用win10+MAMP來架站
目前的規劃,是希望可以用比較嚴謹的方式建立database,會enable STRICT_TRANS_TABLES
可是有關於NO_ZERO_IN_DATE與NO_ZERO_DATE,在看完了MySQL的頁面後,我搞不懂的地方是
在實務上真的會出現需要輸入0000-00-00或者是2001-00-01這樣的內容嗎?還是讓日期出現00,會有某種便利性?
想請各位前輩指點迷津
在實務上真的會出現需要輸入0000-00-00或者是2001-00-01這樣的內容嗎?還是讓日期出現00,會有某種便利性?
實務上是很需要的,比如說您打一張訂單,其中有一格是【預定交貨日】打單當下可能還無法確定,但單子還是得先建檔,這時,只能讓這一格是0000-00-00,等確定後,再回頭來補上。
實務上會碰到還未產生時間的情況
例如訂單的資料表,在下訂的當下,不可能紀錄出貨時間、訂單完成時間、訂單取消時間、訂單退貨時間,如果不是線上刷卡之類的付款方式,也不可能紀錄付款時間,如果你的資料表有以上這些欄位的話
這時候只有兩種選擇,要嘛給出0000-00-00 00:00:00,不然就是NULL
選擇NULL的話,後續要搜尋之類很容易出問題,所以我不是很喜歡使用NULL
2001-00-01
的情形我想不到,如果是 2020-12-00 倒是可以用在「2020年12月」的xxx資料0000-00-00
就要看你對 NULL 的看法了,試回答以下問題:
若儲存一筆員工基本資料,而其中的一個數字欄位(例:「年齡」或是「薪水」)沒有輸入值的時侯
你預期該欄位裡存的是什麼值?
1.NULL - 那本題的日期欄位你就放 NULL 值,不用煩惱什麼 ZERO 不 ZERO DATE
2.0 或其他數字 - 那本題的日期欄位你就放 0000-00-00 值
告訴你一個好消息和壞消息
好消息是
這兩個欄位都將要被 deprecated 了, 你只要設定 strict mode,不用再去煩惱這兩個設定的意義用途和優缺點了..
壞消息是
這句話已經從MySQL 5.7講到MySQL 8.0還在講
另外
如果這幾個問題都解決了的話
請選個最佳解答以進行結案動作
@海綿寶寶
抱歉抱歉,已結案
感謝大大分享