為什麼資料庫字段需要設定預設值

2022-03-18 06:02:21 字數 948 閱讀 9095

非嚴格模式下,mysql會容忍許多開發上的疏忽,例如把乙個長度100的字串插入到varcaht中只會截斷多餘的部分而不報錯。嚴格模式對資料的格式、長度、型別等進行校驗,你貼出的建表語句中指定了default,如果此時不指定default,在你認為會啟用預設值的時候會返回#1364錯誤。

開發階段最好啟用嚴格模式,這是對我們**嚴謹性的測試,嚴進寬出也能保證轉移到產品環境和後續的資料庫遷移、重構順利。

為什麼資料庫要設定預設值呢?因為我們希望在插入資料時,有意或無意間被忽略的字段能夠交由mysql按你事先預想的方式處理,例如一些預設正常狀態碼、使用者插入資料時候尚未設定的文字字段,諸如此類。

我的習慣是任何資料表的任何列都是非空(not null),在此基礎上將數字預設設為0,文字預設設為''(在phpmyadmin中留空)。這裡涉及乙個null和''的區別,對此我所知尚少,我使用''的原因是根據語義null表示「此字段值為空」,而''表示「此欄位暫未設定值」。另乙個原因是在myisam引擎下,null對索引、索引統計、磁碟占用都會有額外的開銷,乙個允許為null的列,每個欄位的長度都比not null的多1bit,我不確定最近幾年是否有所改善,涉及到null的資料大概是在mysql5.0時看過的。

大致區別如下:

// windows下配置檔案mysq.ini中可修改

sql-mode="no_auto_create_user,no_engine_substitution"          //非嚴格

sql-mode=no_engine_substitution,strict_trans_tables               //嚴格

//嚴格模式

不支援對not null欄位插入null值

不支援對自增長字段插入」 "值

不支援text欄位有預設值

資料庫字段設定為《非空》《預設值》

為什麼資料庫要設定預設值呢?因為我們希望在插入資料時,有意或無意間被忽略的字段能夠交由mysql按我們事先預想的方式處理,例如一些預設正常狀態碼 使用者插入資料時候尚未設定的文字字段,諸如此類。假設student表裡有乙個欄位score被設定為 非空 預設值 插入一條資料記錄時,score字段值為空...

改變資料庫欄位的預設值

大家都知道已經發布的專案,在迭代開發的過程中使用的資料庫是不同的,一般分為生產庫和測試庫,當你發現因為資料庫中的字段預設值造成了程式實際使用中的不合理,那麼我們就需要去改變資料庫欄位的預設值了,如下圖 是我公司的乙個錯誤的例項,在管理員下新建了乙個子賬號,管理員賬號的有效期是2018 06 23,新...

Oracle資料庫增加字段,預設值,備註

新增列 alter table kjgl sxs add jjlxr varchar2 20 jjlxdh varchar2 20 新增備註 comment on column kjgl sxs.jjlxr is 緊急聯絡人 comment on column kjgl sxs.jjlxdh is ...