精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL的Varchar字段最大長度真的是65535嗎?

數據庫 MySQL
Char和Varchar的區別在于,Varchar雖然聲明了最大能放100個字符,但一開始不需要分配100個字符的空間,可以根據需要慢慢增加空間。而Char一開始聲明是多少,就固定預留多少空間。

在mysql建表sql里,我們經常會有定義字符串類型的需求。

CREATE TABLE `user` (
`name` varchar(100) NOT NULL DEFAULT '' COMMENT '名字'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;

比方說user表里的名字,就是個字符串。mysql里有兩個類型比較適合這個場景。

char和varchar。

聲明它們都需要在字段邊上加個數組,比如char(100)和varchar(100),這個100是指當前字段能放的最大字符數。

char和varchar的區別在于,varchar雖然聲明了最大能放100個字符,但一開始不需要分配100個字符的空間,可以根據需要慢慢增加空間。而char一開始聲明是多少,就固定預留多少空間。

所以,varchar比起char更省空間,一般沒啥大事,大家都愛用varchar。

那問題來了,聲明varchar字段時,它的最大長度是多少呢?

相信大家應該聽說過varchar字段的最大長度是65535吧。

沒聽過也沒關系,你現在聽到了。

但實際上是這樣嗎?

我們來做個實驗。

varchar最大值是多少

我們直接拿65535來試一下。

圖片

長度為65535的varchar報錯

很明顯報錯了。

報錯內容也說了, 由于列長度過大導致報錯,最長是16383。

把上面的65535改成 16383,確實是成功了。

哦?所以說varchar最大值是16383?

當然不是。

這其實還有好幾個因素影響這這個最大值。

不同字符集的影響

varchar里放的是字符串,而字符串看起來可以是英文字母,也可以是數字或中文。但不管怎么樣,都可以把這樣的中英文數字轉成二進制的01串。

按照一定規則把符號和二進制碼對應起來,這就是編碼。而把n多這種已經編碼的字符聚在一起,就是我們常說的字符集。

建表語句里有個CHARSET,這里填的是字符集。

不同的字符集要求使用的字節個數也不同,我們可以通過 ??show charset;?? 看到mysql支持哪些字符集,以及這些字符集里存儲一個字符所需的最大字節數(Maxlen)。?

圖片

查看mysql支持哪些charset

我們嘗試下把建表sql語句里的CHARSET改一改,比如改成utf8mb3。

我們再執行下,會發現,最大值又不一樣了。

圖片

utf8mb3下的報錯

并且,上面雖然提示max=21845,但要是真執行起來會發現還是報錯。在改為21844之后才成功。

不講武德。

再把字符集改為 latin1。會發現,最大值會是 65533。

圖片

varchar為65533時創建成功

這里漸漸可以發現規律。

  • utf8mb4的maxlen=4,對應varchar最大長度=16383。4*16383 = 65532。
  • utf8mb3的maxlen=3,對應varchar最大長度=21844。3*21844 = 65532。
  • latin1的maxlen=1,對應varchar最大長度=65533。   1 * 65533 = 65533。

也就是說varchar邊上的長度代表的是這一列能放的最大字符數,而maxlen代表單個字符占用的最大字節數。相乘的結果很接近65535。說明65535是指的字節數,而不是字符數。

也就是說varchar的最大長度,根據選擇的字符集的不同,會有區別。

總的來說接近于 65535 除以 字符集的maxlen。

但其實這樣還不夠嚴謹。還有其他影響因素。

是否可以為NULL的影響

上面的建表語句里聲明了test字段都是NOT NULL,也就是非空,如果我們將這個改成可以為NULL,再用 CHARSET=latin1去試試。這時候就會發現,前面NOT NULL的時候最大能使用65533去建表,現在報錯了。

改成65532,就能成功了,也就是最長長度少了1個字節。

圖片

是否為NULL的影響

這是因為一個字段是否為NULL這件事情,是需要一個字節去記錄下來的。

而當字段為NOT NULL的時候,則可以省下這個字節。

列數的影響

上面提到的情況都是在表里只有一列時的結果,當我們表里有更多的列時,我們會發現varchar的最大值還會有變化。比如同樣還是latin1字符集,我們再增加一列varchar類型,并且用的還是前面允許的最大值65533。

結果發現這次會失敗。

圖片

兩個varchar列的情況

查了一下資料發現,原來65535是mysql單行的最大長度(不包含blob和text等類型的情況下)

mysql表里單行中的所有列加起來(不考慮其他隱藏列和記錄頭信息) ,占用的最大長度是65535個字節。

注意上面加粗的部分,加起來不超過65535。

比如如果還有int的列,那它占用4個字節,bigint占用8個字節,字段越多,留給單個varchar列的空間就越少。

因此,前面提到的 varchar 的最大長度,接近于 65535 除以 字符集的maxlen,但前提是只有一列not null 的varchar類型的字段。

為什么不是65535而是65533?

不過問題又來了,上面建表sql里,不管是那種字符集,最后得到的字符數都約等于65533。

但數據庫單行最大值應該是65535。65535 - 65533 = 2 。這里面還差了個2,為什么呢?

這就要聊一下mysql單行里數據到底是怎么存儲的。

數據表行存儲的格式

我們可以通過 show table status 命令,查看到當前表格使用的行格式。

圖片

查看到當前表格使用的行格式

通過上面的 Row_format 字段可以看到這個表用的是 Dynamic 行格式。

事實上,現在的mysql數據表一般都是采用Dynamic行記錄格式。

我們來看下Dynamic行格式長什么樣子。

圖片

Dynamic行記錄格式

Dynamic格式將行記錄分為兩部分,分為是行記錄的額外信息和行記錄的真實數據。

行記錄的額外信息:

  • 變長字段長度列表:指的是varchar,text,blob這種類型,它們屬于變長字段,這里表示的就是這些字段的長度。
  • NULL值列表:用來記錄當前行里哪些列是為null的。如果全部列都是not null的話,那就不需要有這個字段。
  • 記錄頭信息:這是固定5個字節,用來記錄一些特殊的信息,比如這一行是否被刪了,這一行在這個16k的數據頁內是不是最小的,以及指向下一條記錄的指針之類的一些信息,不需要太關注。

行記錄的真實數據:

里面放的就是一行里,每一列的真正內容。除了我們建表時里涉及到的列以外,還有一些隱藏列。

比如Row_ID,這個是在建表是沒有聲明主鍵時,數據表自動會生成的隱藏主鍵。另外還有trx_id字段,用于記錄當前這一行數據行是被哪個事務修改的,和一個roll_pointer字段,這個字段是用來指向當前這個數據行的上一個版本,通過這個字段,可以為這行數據形成一條版本鏈,從而實現多版本并發控制(MVCC)。有沒有很眼熟,這個在之前寫的文章里出現過。

圖片

隱藏列有哪些

所以我們回過頭來看我們建的表,當只有一列not null的 varchar字段時,行記錄長下面這樣。

圖片

單條varchar數據的Dynamic行記錄格式.drawio

前面提到,行最大值65535字節是不包含隱藏列和記錄頭信息的,所以其實是指上圖中紅色的部分。

而最左邊的變長字段長度列表中,為了表示varchar列的長度,占用了兩個字節,也就是16位,2的16次方,最大可以表示65535的長度,正好足夠用來表示varchar列當前的長度是65533。

所以65535 - 65533 = 2 。這里面差的2,是用來存varchar字段長度去了。

一個頁才16k,怎么保存65533(64k)數據?

之前的文章里其實多次提到了mysql底層是以頁的形式去存儲數據的,而一個頁固定16k,而一個varchar字段最大能放65533字節數據,換算一下大概是64k,整整4個16k的頁。

圖片

頁結構

這里面是怎么實現的?

對于這種情況,其實行數據里針對這個超大的varchar字段只保存個20字節的指針(實際上是個偏移量),這個指針會指向新的頁(off page),這些頁里保存的是實際的varchar字段里的65533字節數據。這種由于字段過長導致需要額外的頁來保存數據的現象叫行溢出。

圖片

行溢出

大于64k的字符串該怎么處理?

如果離譜點,數據量更大,比64k還大,這時候就不能繼續用varchar了,需要改用text和blob類型字段。

而text和blob類型本身也是分TINY、MEDIUM,LONG三個檔位的,對應著不同的數據長度,最大到4G左右。

像下面這樣就可以將數據類型定義為LONGTEXT。

CREATE TABLE `test_max_length` (
`test` LONGTEXT NOT NULL COMMENT '測試長度字段'
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

而他們的存儲方式也跟varchar的情況類似,只保存20個字節的指針,實際數據保存在其他溢出頁里。

以前我們查某一行數據,他們都在一個16k的數據頁里,查詢時只要一次磁盤IO就能將這個數據頁讀取出來。

當一個數據庫里某行數據里有個特別大的字符串時,我們如果還想把整行數據給讀出來,那我們還得把off page的數據給全部讀出來,這意味著更多的磁盤IO,性能就更差了。

為了規避這個問題,我們寫select sql的時候,如果發現某列字段,是個特別長的字符串時,能不讀它就盡量不加到select里,這也是為什么大家不建議使用select * from table的原因。

blob和text的區別

一般來說,blob和text都可以用來放超長字符串。但它們會有一點點區別。

我們知道字符集(charset)下還有個校對規則(collation)的概念,比如同樣是a,大寫A和小寫a能不能算作是一個字符,這會影響比較和排序,collation就是定義這個規則用的。

blob沒有字符集的概念,而text有。這意味如果用blob來存文本的話,就沒法用字符集的校對規則來排序和做比較。

還有一個區別,blob還能保存二進制數據,比如壓縮過的文本數據,圖片或者視頻,別笑,雖然不合適,但我確實見過有人拿它來保存視頻。

總結

  • 現在的mysql數據表一般采用Dynamic行記錄格式。它由行記錄的額外信息和行記錄的真實數據組成。
  • mysql表里單行中的所有列加起來(不考慮其他隱藏列和記錄頭信息) ,占用的最大長度是65535個字節。
  • 如果數據表里只有一列 not null 的varchar字段,它的最大長度,接近于 65535 除以 字符集的maxlen
  • 如果要存放大于64k的字段數據,可以考慮使用longtext和longblob等類型。
  • mysql的數據頁大小是16k,為了保存varchar或者text,blob這種長度可能大于16k的字段,在Dynamic行格式中,會只保留20個字節的指針,實際數據則放在其他溢出頁中。為了將它們讀取出來,會需要更多的磁盤IO。
  • blob和text很像,但blob沒有字符集的概念,并且還能存放二進制的數據,比如圖片或視頻,但實際上圖片和視頻更推薦放在對象存儲(Object Storage Service,簡稱oss)中。
責任編輯:姜華 來源: 小白debug
相關推薦

2022-12-05 14:05:26

MySQL最大取值存儲

2010-11-22 11:55:23

MySQL字段

2020-12-24 06:00:27

Python編程語言開發

2010-10-08 14:59:00

MySql字段

2015-04-28 13:56:00

JavaJava優勢跨平臺

2010-08-19 09:48:41

Unix

2021-12-15 23:07:53

元宇宙VR平行時空

2022-09-28 18:16:34

JavaJDK

2022-09-16 16:34:22

比特幣金融貨幣

2024-04-16 08:15:07

CHAR數據字符串

2023-11-27 16:26:20

mainC語言

2023-05-04 11:35:15

無人機

2021-11-26 08:07:16

MySQL SQL 語句數據庫

2022-04-13 20:25:16

中臺業務架構

2018-02-25 11:00:34

代碼開發程序員

2018-05-14 10:56:36

MySQL數據庫存儲

2018-07-12 11:48:31

微服務Service mes服務

2020-09-03 06:42:12

線程安全CPU

2024-01-29 10:09:59

數據庫INT(3)INT(11)

2017-12-22 15:34:49

AI美圖
點贊
收藏

51CTO技術棧公眾號

91视频在线网站| 欧美人与动牲交xxxxbbbb| 91色视频在线观看| 一级性生活毛片| 成人国产网站| 亚洲自拍欧美精品| 久久亚洲午夜电影| 国产精品一区二区av白丝下载| 欧美精品99| 亚洲欧洲高清在线| 国产999免费视频| 日本乱码一区二区三区不卡| 国产精品久久久久久久久久久免费看 | 精品国产乱码久久久久久蜜柚 | 国产精品18在线| 97精品久久| 欧美性猛片xxxx免费看久爱| 91免费国产精品| 97超碰国产一区二区三区| 国产aⅴ综合色| 国产精品日日摸夜夜添夜夜av| 久草视频中文在线| 日韩中文首页| 精品一区二区电影| 日本精品一二三| 99视频这里有精品| 在线看不卡av| heyzo亚洲| av中文字幕在线播放| 久久精品亚洲一区二区三区浴池| 91精品中文在线| 亚洲 日本 欧美 中文幕| 欧美日韩p片| 日韩亚洲成人av在线| 中文成人无字幕乱码精品区| 国产精品亚洲四区在线观看| 欧美制服丝袜第一页| 88在线观看91蜜桃国自产| 欧美性xxxx69| 天堂网av在线播放| 国产suv一区二区三区88区| 国产精品久久久久久久av电影 | 欧美性猛交xxxxx免费看| 日韩欧美视频免费在线观看| 欧美三级黄网| 中文字幕乱码一区二区免费| 欧美二区三区在线| 四虎影院在线域名免费观看| 成人免费视频一区| julia一区二区中文久久94| 97精品人妻一区二区三区| 日本vs亚洲vs韩国一区三区二区| 日本高清不卡在线| 日韩精品在线免费视频| 国产欧美69| 8x海外华人永久免费日韩内陆视频| 麻豆国产尤物av尤物在线观看| 久久精品影视| 蜜臀久久99精品久久久无需会员| 国产日产精品一区二区三区的介绍| 精品久久美女| 一区二区欧美在线| 三年中国中文观看免费播放| 成人91在线| 神马久久桃色视频| 国产视频精品免费| 综合久久十次| 欧美日韩国产123| www.天天色| 亚洲专区欧美专区| 青青草原一区二区| 制服丝袜在线一区| 国产一区美女在线| 国产成人精品一区二区三区福利| 黑人精品一区二区| 99精品国产视频| 日本不卡一区二区三区在线观看| 国产在线视频网| 国产精品福利一区| 国产xxxx振车| 亚洲美女久久精品| 欧美日韩中字一区| 91精产国品一二三产区别沈先生| 欧洲大片精品免费永久看nba| 欧美va亚洲va在线观看蝴蝶网| 国产精品一区二区人妻喷水| 国产一区二区三区四区五区| 综合136福利视频在线| 性欧美videos| 一本久久综合| 国产精品欧美日韩| www.国产精品视频| 972aa.com艺术欧美| 日日骚一区二区网站| 黄色网页在线免费看| 亚洲一卡二卡三卡四卡五卡| 精品久久久久久久免费人妻| 亚洲国产aⅴ精品一区二区三区| 欧美xxxxxxxxx| 免费在线观看a视频| 中文无码久久精品| 26uuu另类亚洲欧美日本老年| 中文字幕日日夜夜| 高清shemale亚洲人妖| 麻豆成人在线播放| av大片在线| 色美美综合视频| 少妇欧美激情一区二区三区| 亚洲人亚洲人色久| 久久中文字幕国产| 无码视频一区二区三区| 国产乱码精品一区二区三区av | 欧美综合另类| 欧美激情中文字幕在线| 久久久久久久久久一级| 国产·精品毛片| 亚洲欧美日产图| 樱花草涩涩www在线播放| 91精品一区二区三区久久久久久| 不卡一区二区在线观看| 亚洲欧美伊人| 国产一区在线播放| 免费在线超碰| 亚洲成人午夜影院| 欧美日韩精品区别| 激情五月综合网| 97精品久久久| 亚洲国产999| 亚洲日本在线天堂| 污污的网站18| 男男gay无套免费视频欧美 | 成人在线视频免费看| 亚洲激情国产精品| 久久久久亚洲av无码专区| 紧缚捆绑精品一区二区| 日韩美女一区| 国产日韩另类视频一区| 日韩av一区在线| 日本少妇xxxx动漫| 丰满少妇久久久久久久| 久久免费一级片| 亚洲久草在线| 日韩在线国产精品| 国产精品成人无码| 国产色综合久久| 日本男人操女人| 欧美人与动xxxxz0oz| 久久久亚洲精品视频| 成人精品在线播放| 亚洲一区二区三区四区在线| 日本一区二区三区在线免费观看| 国产精品传媒精东影业在线| 国产欧美日韩免费看aⅴ视频| 91视频在线观看| 欧美亚洲一区三区| 日本在线观看网址| 美女国产一区二区三区| 亚洲国产精品视频一区| 欧美日韩国产网站| 中文字幕精品在线| 一级黄色a视频| 亚洲欧洲成人精品av97| www.桃色.com| 欧美午夜视频| 国产日韩精品推荐| 一根才成人网| 中文字幕日韩综合av| 亚洲自拍偷拍另类| 亚洲免费三区一区二区| www日本在线观看| 1024日韩| 青娱乐国产91| 88xx成人网| 久久精品国产欧美激情| 亚洲黄色一级大片| 欧美日韩激情视频| 国产精品久久免费观看| 国产美女娇喘av呻吟久久| 99久久99久久精品| 亚洲图片久久| 国产一区二中文字幕在线看| 欧美bbbxxxxx| 亚洲欧美国内爽妇网| 一区二区国产欧美| 亚洲第一av色| 久久久免费看片| 国产成人精品免费在线| 国产l精品国产亚洲区久久| 日韩欧美一区二区三区免费看| 91网站在线免费观看| 国产美女精品写真福利视频| 神马久久久久久| 亚洲精品久久久久久无码色欲四季 | 国产成人在线播放视频| 亚洲国产精品成人综合色在线婷婷| 在线免费黄色网| 国产精品毛片| 国产av第一区| 少妇精品久久久一区二区| 91欧美日韩一区| 日韩免费电影| 国内精品免费午夜毛片| 蝌蚪视频在线播放| 日韩免费性生活视频播放| 高潮毛片又色又爽免费| 一区二区三区四区高清精品免费观看 | 一区二区三区四区高清视频| 国产精品久久一区| 福利写真视频网站在线| 日韩在线视频一区| 头脑特工队2免费完整版在线观看| 欧美一级午夜免费电影| 中文字幕av久久爽| 欧美日韩另类在线| 久久免费公开视频| 国产精品国产三级国产aⅴ无密码| 老司机午夜免费福利| 久草中文综合在线| 日韩avxxx| 国产精品黄色| 日本在线视频www色| 成人激情在线| 老司机精品福利在线观看| 成人爽a毛片免费啪啪红桃视频| 91精品视频在线看| 青青青国产精品| 国产精品第1页| 在线成人av观看| 欧美激情xxxx| 综合久久2o19| 日韩中文字幕免费看| www亚洲人| 亚洲欧洲在线播放| 青青草娱乐在线| 精品少妇一区二区三区日产乱码 | 在线国产伦理一区| 神马影视一区二区| 欧美精品一区二区三区在线四季| 红杏成人性视频免费看| 国产精品国产精品| **爰片久久毛片| 成人免费看片网址| 日韩一二三区| 97久久人人超碰caoprom欧美 | 欧美嫩在线观看| 亚洲中文一区二区三区| 欧美日韩在线三区| 在线观看视频中文字幕| 欧美色窝79yyyycom| 中日韩av在线| 欧美群妇大交群的观看方式| 国产精品玖玖玖| 日韩限制级电影在线观看| 99精品在线看| 欧美不卡一区二区三区四区| 蜜臀av在线观看| 日韩经典中文字幕在线观看| 日韩有码电影| 中文字幕精品国产| 调教视频免费在线观看| 欧美成人中文字幕| 激情网站在线| 91av视频在线观看| 欧美第一视频| 国产在线观看精品| 日本精品一区二区三区在线观看视频| 成人国产1314www色视频| 久久99精品久久久久久欧洲站| 久久99精品久久久久久青青日本| 神马影视一区二区| 伊人久久青草| 国模一区二区三区| 人妻有码中文字幕| 日本女人一区二区三区| 在线观看中文av| av电影一区二区| 国产 欧美 在线| 国产精品久久久久影院老司| 免费在线黄色片| 日韩欧美大尺度| 一区二区三区精| 精品噜噜噜噜久久久久久久久试看| 五月天久久久久久| 一区二区三区国产在线观看| 国产一二三区在线观看| 97视频在线看| 粉嫩av一区二区三区四区五区 | 婷婷亚洲精品| 亚洲不卡一卡2卡三卡4卡5卡精品| 欧美日韩国产一区二区三区不卡| 国产一区一区三区| 国产欧美精品| 午夜视频在线观| 99这里都是精品| 色婷婷国产精品免| 亚洲一区二区三区视频在线 | 日韩av毛片| 日韩av123| 无人区乱码一区二区三区| 欧洲亚洲一区二区| 午夜日韩激情| 亚洲黄色小视频在线观看| 国产很黄免费观看久久| 国产jjizz一区二区三区视频| 亚洲国产精品精华液ab| 国产午夜福利片| 8v天堂国产在线一区二区| 免费人成在线观看网站| 欧美成人性生活| 成人精品国产亚洲| 国产v亚洲v天堂无码| 日韩美女一区二区三区在线观看| 黄页网站大全在线观看| 激情亚洲综合在线| 白白色免费视频| 午夜婷婷国产麻豆精品| 久久久国内精品| 日韩在线不卡| 日韩精品一区中文字幕| 99视频一区二区| 69av.com| 欧美麻豆精品久久久久久| 精品乱码一区二区三四区视频| 久久欧美在线电影| 蜜桃精品一区二区三区| 亚洲一区二区三区精品视频| 蜜桃av一区| 亚洲一区二区三区四区五区六区| 亚洲在线视频网站| 999精品国产| zzjj国产精品一区二区| 国模一区二区| 欧美日韩国产三区| 亚洲最黄网站| 天天躁日日躁狠狠躁免费麻豆| 亚洲嫩草精品久久| 一本色道久久综合亚洲| 中文字幕精品—区二区| 97久久网站| 亚洲精品高清视频| 日韩国产在线观看一区| 免费看污片网站| 欧美性猛交xxxx久久久| 天堂中文资源在线| 欧美专区国产专区| 妖精视频一区二区三区| 日本新janpanese乱熟| 久久久久国产精品麻豆| 99久在线精品99re8热| 亚洲黄色在线观看| 伊人久久国产| 五月天亚洲综合情| 美国毛片一区二区三区| 乱老熟女一区二区三区| 69久久夜色精品国产69蝌蚪网| 黄色网址在线免费| 成人9ⅰ免费影视网站| 亚洲国产午夜| a毛片毛片av永久免费| 欧美体内谢she精2性欧美| 男人天堂网在线| 国产美女直播视频一区| 国产精品久久久久久久| 黄色a级三级三级三级| 亚洲国产欧美另类丝袜| 亚洲 小说区 图片区 都市| 日韩av免费看| 国产精品毛片久久| 毛毛毛毛毛毛毛片123| 午夜影院在线观看欧美| 精品999视频| 91视频免费在线| 亚洲三级影院| 久久亚洲AV无码专区成人国产| 欧美日本国产视频| 污污网站在线观看| 久久99精品国产99久久| 三级欧美在线一区| 91香蕉视频污在线观看| 日韩欧美国产综合在线一区二区三区 | 中文字幕在线观看高清| 久久香蕉国产线看观看av| 国产精品玖玖玖在线资源| 久草在在线视频| 亚洲欧美日韩电影| 亚洲欧美日韩综合在线| 国产日韩亚洲欧美| 亚洲国产电影| av片在线免费看| 亚洲精品一区二区三区在线观看 | 亚洲第一黄色| 免费毛片视频网站| 日韩欧美国产综合一区| 欧美电影h版| 国产黄色激情视频| 久久久久久久av麻豆果冻| 99在线观看免费| 国产99久久精品一区二区永久免费 | 欧美天堂一区| 免费在线激情视频|