mysql給text設置一個默認值(乾貨)

這周有個需求裏面原先是用redis的,可是後面經同事介紹說明,決定仍是用mysql,當時想在表裏面加一個text字段,可是考慮到程序其餘地方會不會有對該表的插入操做,因此不經思索的就說給text字段加一個默認值,可是同事說不行,text字段不能有默認值。這才仔細想來好像本身也從沒有給text字段設置過默認值。mysql

除了text字段不能默認值,還有哪些字段也不能設置默認值?

Mysql5.7版本:BLOB, GEOMETRY, JSONredis

爲何不能給text字段設置默認值?

我看了mysql官方文檔上面只有一句話BLOB and TEXT columns cannot have DEFAULT values.。可是我想細究下到底爲何,而後看到了Strict SQL Modesql

那什麼是Strict SQL Mode?

嚴格模式控制MySQL如何處理數據更改語句(如INSERT或)中的無效或缺失值UPDATE。因爲多種緣由,值可能無效。例如,列可能具備錯誤的數據類型,或者可能超出範圍。當要插入的新行不包含其定義中NULL沒有顯式DEFAULT子句的非列的值時,缺乏值。(對於 NULL列,NULL若是缺乏值,則插入。)簡單來理解就是MySQL自身對數據進行嚴格的校驗(格式、長度、類型等)測試

MySQL開啓了嚴格模式從必定程序上來說,是對咱們寫的代碼的一種測試,若是咱們的開發環境沒有開啓嚴格模式在開發過程當中也沒有遇到錯誤,那麼在上線或代碼移植的時候將有可能出現不兼容的狀況,所以在開發過程作最好開啓MySQL的嚴格模式。code

Strict SQL Mode的做用?

1 不爲null的字段不能寫入null數據。 2 text字段沒有默認值 3 自增加的字段不能自定義值cdn

就是想給text設置一個默認值?

若是非要給text設置一個默認值,只能關閉嚴格模式,具體作法以下所示:(以個人win10環境爲例) 方法1.能夠經過執行SQL語句來開啓(只對當前鏈接有效): set sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";blog

方法2.經過修改MySQL的配置文件,若是有sql-model就直接修改爲:sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,若是沒有則在[mysqld]下加上這句話,以後重啓mysql。開發

相關文章
相關標籤/搜索