針對如下這個,我以爲這樣作是可取的:java
3)每一個字段儘可能設置不可爲空,對於有些業務好比訂單的出倉時間確實須要等到出倉掃描時纔有值的能夠容許爲空;mysql
供參考的解決方案:sql
所有字段都設置爲not null,併發
int ,date,datetime,timestamp類型均可以default 0 優化
orm層配置增長以下:設計
zeroDateTimeBehavior=convertToNullorm
這樣代碼層面無需任何改動。()io
一來兼顧db層面的優化,數據量大併發時,這種摳門是可取的,test
二來兼顧tms業務.配置
時間緊迫,可針對大表。
ps:
set datetime = null 它會清到 0.,,是的,。,但不能 統一標準啊。
把全部 time 有關的改爲not null default 0 .. 代碼 把UPDATE seq_rule SET test_date=null 改爲 UPDATE seq_rule SET test_date=0 能夠
這樣的話,,就能夠統一全部time類型
單是db層面的話
timestamp類型 + not null default 0 . + UPDATE seq_rule SET test_date=0
能夠解決 ,java層面?
others:
set timestamp = null . timestamp會自動刷到當前時間, 無論你是否default 0.
set timestamp = 0 . timestamp纔會刷到'0000-00-00 00:00:00', 無論你是否default 0.
在MySQL 鏈接
jdbcUrl = jdbc:mysql://127.0.0.1/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
這樣設置,也是爲了處理時間是 0000-00-00 00:00:00
獲取出現異常的問題
在JDBC鏈接串中有一項屬性:zeroDateTimeBehavior,能夠用來配置出現這種狀況時的處理策略,該屬性有下列三個屬性值:
l exception:默認值,即拋出SQL state [S1009]. Cannot convert value....的異常;
l convertToNull:將日期轉換成NULL值;
l round:替換成最近的日期即0001-01-01;
所以對於這類異常,能夠考慮經過修改鏈接串,附加zeroDateTimeBehavior=convertToNull屬性的方式予以規避,例如:
jdbc:mysql://localhost:3306/mydbname?zeroDateTimeBehavior=convertToNull
從另外一個層面講,這類異常的觸發也與timestamp賦值的操做有關,若是可以在設計階段和記錄寫入階段作好邏輯判斷,避免寫入 '0000-00-00 00:00:00'這類值,那麼也能夠避免出現 Cannot convert value '0000-00-00 00:00:00' from column N to TIMESTAMP的錯 誤。