MySQL Varchar的新認識

MySQL中的char,varvhar以及text類型一直是需要被搞清楚的一回事,他們之間的大致的區別在網上都有。

我查了以後發現對於varchar,網上說的是最大長度爲65535個字節(網上說MySQL5.0.3之後纔有,5.0.3之前varchar的最大值並沒有那麼大,這個說法我並沒有去求證),於是我試了下,結果發現直接把varchar的最大值調到65535是不行的,還需要考慮兩個規則:

1.65535個字節指的是一行記錄的最大字節數,並不是一個字段的最大字節數。

2.mysql在存儲每個varchar類型的字段數據時有1-2個字節用於記錄該字段存儲的字節數,以及當表字段允許有空值時,還需要一個字節由於記錄每一行數據的空值。

什麼意思呢?舉個栗子來說如果你想建立一個單字段的表,字段數據類型爲varchar,並且是非空的,那麼你最大可以把varchar值調到65533。因爲每行記錄沒有空值,即不需要1個字節來記錄空值分佈,但是每行記錄有1個字段,該字段需要2個字節記錄數據存儲量(255字節一下是1個字節存儲,超過255需要2個字節存儲)。所以這麼算下來,varchar最大可以65533,截圖如下:


這個栗子變一下:要是你想建立一個單字段的表,字段數據類型爲varchar,但是是允許爲空的,那麼varchar最大值只能調到65532了,不多解釋,不信你try。好吧,我還是附上圖吧:


這個栗子再變一下:要是你想建立一個3個字段的表,每個字段數據類型爲varchar,並且都是非空的,其中兩個字段的varchar值設爲20,那麼第三個字段的varchar最大可以設爲多少?(因爲65535-(20+1)-(20+1)=65493>255,所以最大值=65493-2=65491個字節)

證明如下:


好吧,栗子就舉到這了。總的規則就是上面提到的兩條。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章