MySQL中varchar類型的字段默認值設(shè)置方式
MySQL varchar字段默認值設(shè)置
最近開始給項目設(shè)計數(shù)據(jù)庫,遇到一個可能很多人都會遇到的問題,就是設(shè)定某一個字段的默認值的時候,是設(shè)定null,“”,還是empty string呢?
我們從mysql本身來看:
1:空值(‘’)是不占用空間的
2:MySQL中的NULL其實是占用空間的。
官方文檔說明:
NULL columns require additional space in the row to record whether their values are NULL.
For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.
所以 mysql設(shè)計表時 建議不要用default NULL
- string類型的可以default ''或者emptystring
- int類型的可以default 0
另外一點,從不同的項目開發(fā)去分析這個問題:
以前單純做web網(wǎng)頁端,對這個默認值設(shè)定問題選用null 還是empty string。
但是后來在另外一個團隊開發(fā)app的時候,這個null和empty string的問題就尤為突出,因為我是用php做接口開發(fā),如果一旦出現(xiàn)null的數(shù)據(jù)類型,沒有處理直接返回去前端,那么無論是ios還是Android端,如果沒有處理好這個空的判斷,要么就直接輸出null,要么程序直接報錯。
所有建議設(shè)計數(shù)據(jù)庫的時候默認值盡量少用null。
Mysql Varchar 類型為什么默認設(shè)置 255?
Mysql5.6.x
在 Mysql5.6 版本下,單列索引的長度不能超過 767bytes,聯(lián)合索引的長度不能超過 3072bytes
Mysql5.7.x
在 Mysql5.7 版本下,單列索引的長度不能超過 3072bytes,聯(lián)合索引的長度不能超過 3072bytes
utf8
上面說到單列索引長度為 767,在 utf8 編碼下,一個字符為 3bytes,那么 255*3=765,剛好為能夠建立索引長度的最大值,如果超出了這個值,如果使用的是 navicat 那么 mysql 會自動將這一列的索引變?yōu)榍熬Y索引,截取 255
utf8mb4
在 utf8mb4 下,一個字符為 4bytes, 那么 767÷4=191.75,取整為 191,所以在 utf8mb4 編碼下,如果你的 varchar 超出 191,如果使用的是 navicat 那么 mysql 會自動將這一列的索引變?yōu)榍熬Y索引,截取 191
為什么聯(lián)合索引長度是 3072
我們知道 InnoDB 一個 page 的默認大小是 16k。由于是 Btree 組織,要求葉子節(jié)點上一個 page 至少要包含兩條記錄(否則就退化鏈表了)。
所以一個記錄最多不能超過 8k。
又由于 InnoDB 的聚簇索引結(jié)構(gòu),一個二級索引要包含主鍵索引,因此每個單個索引不能超過 4k (極端情況,pk 和某個二級索引都達到這個限制)。
由于需要預(yù)留和輔助空間,扣掉后不能超過 3500,取個 整數(shù) 就是 1024*3=3072
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql 8.0.18各版本安裝及安裝中出現(xiàn)的問題(精華總結(jié))
這篇文章主要介紹了mysql 8.0.18各版本安裝及安裝中出現(xiàn)的問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12在win10系統(tǒng)下安裝Mysql 5.7.17圖文教程
因為想要在公司電腦上安裝Mysql,于是到官網(wǎng)上下載了最新版本的Mysql-5.7.17,其實安裝方法也很簡單,下面小編把安裝過程分享到腳本之家平臺供大家參考2017-03-03虛擬機linux端mysql數(shù)據(jù)庫無法遠程訪問的解決辦法
最近在項目搭建過程中遇到一問題,有關(guān)虛擬機linux端mysql數(shù)據(jù)庫無法遠程訪問,通過查閱相關(guān)數(shù)據(jù)庫資料問題解決,下面把具體的解決辦法分享給大家,有需要的朋友可以參考下2015-08-08解析在MySQL里創(chuàng)建外鍵時ERROR 1005的解決辦法
本篇文章是對在MySQL里創(chuàng)建外鍵時ERROR 1005的解決辦法進行了詳細的分析介紹,需要的朋友參考下2013-06-06