亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

MySQL定義VARCHAR(M)最多可以是65535個字節,M表示的是「字符數量」,但是實際存儲中并不能存儲那么多字節。如果一個字段超過了65535個字節,可以選擇使用TEXT或者BLOB類型。

對于一個列來說,除了存儲本身數據以外還要存儲MySQL定義的數據,根據行記錄格式,VARCHAR(M)存儲空間由3部分構成,分別為真實數據、真實數據的長度、NULL值標識。真實數據是用戶要存儲的數據,真實數據的長度是用戶存儲的這部分數據的長度,NULL值標識是該列是否允許為NULL。其中真實數據的長度會占用2個字節,NULL值標識占用1個字節,如果該列NOT NULL則NULL值標識不占用空間。

就是說當該列允許為NULL時,最多只能存儲65535-2-1=65532個字節,如果該列為NOT NULL時,最多只能存儲65535-2=65533個字節。

VARCHAR(M)最多能存儲多少真實數據(也就是M的最大取值)跟字段采用的字符集有關,以下就拿字符集utf8、gbk、utf8mb4說明一下:

  • utf8字符集:MySQL中的utf8字符集跟標準的utf-8字符集是不同的。MySQL中的utf8字符集一個字符最多占3個字節,而標準的utf-8字符集是最多占4個字節。在字段允許為NULL的情況下,計算最多能存儲多少真實數據的公式為(65535-2-1)÷3=21844,字段不允許為NULL的情況下,公式為(65535-2)÷3=21844.333,所以utf8字符集最多能存儲21844個字符。 由于字段允許為NULL就只占一個字節,在字符集最多占用字節數大于1的情況下,計算出來的結果中會有小數,小數最終也會被舍棄,所以就先不考慮字段是否允許為NULL值了。
  • gbk字符集:gbk字符集中一個字符最多占2個字節。最多能存儲多少真實數據的公式為(65535-2)÷2=32766,所以M的最大值32766。
  • utf8mb4字符集:utf8mb4字符集中一個字符最多占用4個字節。最多能存儲多少真實數據的公式為(65535-2)÷4=16383.25,小數舍棄就是最多能存儲16383個字符。

實際上在設置VARCHAR(M)最多存儲多少字符時,要在上面計算結果的基礎上「減一」

如果字段設置的長度超過了實際能存儲的長度,MySQL就是報下面這個錯誤

ERROR 1118 (42000): Row size too large. The maximum row size for the used
table type, not counting BLOBs, is 65535. This includes storage overhead,
check the manual. You have to change some columns to TEXT or BLOBs

最后總結一下,VARCHAR能最多能存儲多少真實數據跟字符編碼集有關,最多能存儲多少個字符是個上限值,實際存儲不了那么多,要在上限值的基礎上減一。

分享到:
標簽:MySQL
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定