一、問題描述
在往資料庫寫入資料的時候,報錯:
本來這個錯誤是經常見到的,無非就是字段沒有設定預設值造成的。奇怪的是,我這邊報錯的字段,其類型是text類型。衆所周知的,text類型是不能有預設值的。如此一來就有了沖突,text類型的字段明明不能有預設值,那麼為什麼還會給我報錯,提示缺少預設值呢?
二、問題所在
1、檢視字段類型
通過phpmyadmin檢視資料表的字段結構,發現text字段在建立的時候,文法為:
這個建立語句乍一看沒有問題,但是如果text類型既沒有預設值,也不能為null的話,那麼插入的時候,肯定是會出現問題的。
2、解決方案
按照上面的推測邏輯,重新修改字段屬性:
然後進行測試,發現寫入資料成功。此時檢視phpmyadmin的資料表結構,發現此時字段的預設值為null了。果然是not null的問題,問題是,建立資料表的時候,盡量設定字段為not null已經成為共識。。雖然解決了問題,但部落客還是不太了解原理是什麼。
關于mysql預設值和設定not null的問題,參考部落格: 關于mysql設定varchar 字段的預設值”和null的差別,以及varchar和char的差別
三、為什麼會報錯
1、第一個原因
通過一頓百度,終于在百度知道上看到這句話:
如果是not null的話,那你就必須插入一個值,你不插入值的話,就會調用預設值。 如果這兩個都沒有的話,就會報錯了。
這個意思就和咱們最開始推測的差不多,字段類型既是 not null,而且還沒預設值,那麼在寫入資料的時候肯定是有問題的。就像我們平時看到的,在建立字段并且不設定預設值的時候,mysql都會預設給字段加上預設值null。
2、第二個原因
這個原因就是資料庫的嚴格模式的問題。在mysql 5.7之後,資料庫預設都是采用嚴格模式。
關于嚴格模式的解釋: mysql給字段設定預設值,以及mysql的嚴格模式
關于嚴格模式這個,我并沒有測試,個人感覺還是建表時候不夠嚴謹造成的問題。關于設定字段預設值和設定not null方面不熟悉造成的。
四、總結
1、如果字段為int 或者varchar類型,那麼要設定字段類型為 not null 并且設定default
2、如果字段為text,則既不需要設定not null,也不需要手動設定default 的值
3、關于text字段不能有預設值的問題,這個隻針對于手動增加的default屬性,如果建立字段不設定default的話,mysql會預設加上一個預設值
Null
end
原文位址:https://blog.csdn.net/LJFPHP/article/details/81939189
一、問題描述
在往資料庫寫入資料的時候,報錯:
本來這個錯誤是經常見到的,無非就是字段沒有設定預設值造成的。奇怪的是,我這邊報錯的字段,其類型是text類型。衆所周知的,text類型是不能有預設值的。如此一來就有了沖突,text類型的字段明明不能有預設值,那麼為什麼還會給我報錯,提示缺少預設值呢?
二、問題所在
1、檢視字段類型
通過phpmyadmin檢視資料表的字段結構,發現text字段在建立的時候,文法為:
這個建立語句乍一看沒有問題,但是如果text類型既沒有預設值,也不能為null的話,那麼插入的時候,肯定是會出現問題的。
2、解決方案
按照上面的推測邏輯,重新修改字段屬性:
然後進行測試,發現寫入資料成功。此時檢視phpmyadmin的資料表結構,發現此時字段的預設值為null了。果然是not null的問題,問題是,建立資料表的時候,盡量設定字段為not null已經成為共識。。雖然解決了問題,但部落客還是不太了解原理是什麼。
關于mysql預設值和設定not null的問題,參考部落格: 關于mysql設定varchar 字段的預設值”和null的差別,以及varchar和char的差別
三、為什麼會報錯
1、第一個原因
通過一頓百度,終于在百度知道上看到這句話:
如果是not null的話,那你就必須插入一個值,你不插入值的話,就會調用預設值。 如果這兩個都沒有的話,就會報錯了。
這個意思就和咱們最開始推測的差不多,字段類型既是 not null,而且還沒預設值,那麼在寫入資料的時候肯定是有問題的。就像我們平時看到的,在建立字段并且不設定預設值的時候,mysql都會預設給字段加上預設值null。
2、第二個原因
這個原因就是資料庫的嚴格模式的問題。在mysql 5.7之後,資料庫預設都是采用嚴格模式。
關于嚴格模式的解釋: mysql給字段設定預設值,以及mysql的嚴格模式
關于嚴格模式這個,我并沒有測試,個人感覺還是建表時候不夠嚴謹造成的問題。關于設定字段預設值和設定not null方面不熟悉造成的。
四、總結
1、如果字段為int 或者varchar類型,那麼要設定字段類型為 not null 并且設定default
2、如果字段為text,則既不需要設定not null,也不需要手動設定default 的值
3、關于text字段不能有預設值的問題,這個隻針對于手動增加的default屬性,如果建立字段不設定default的話,mysql會預設加上一個預設值
Null
end
原文位址:https://blog.csdn.net/LJFPHP/article/details/81939189