MySQL 記錄長度與字元儲存

2021-07-31 22:44:48 字數 2354 閱讀 9410

mysql中規定:任何一條記錄最多不能超過65535個位元組,即varchar永遠不可能達到其理論值(即使編碼改為latin1,那麼最多儲存65533個字元,餘出兩位儲存字元長度)。

varchar的實際儲存長度能達到多少呢?依據字元編碼。

看了上圖,提示是21845;再看下圖:

提示size too large,但是又說最大size是65535?!

答案:不要忘記了,varchar需要留有位元組儲存長度;!!

如果是21845,那麼對應位元組為:21845*3+2=65537>65535!

所以 utf8下,varchar實際最大長度為21844!!!gbk最大長度計算原理與此相同

上面說明,當使用21844長度時,占用位元組為65534,那麼還剩餘乙個位元組。

理論上,如果想用完這個位元組,增加一tinyint欄位即可,拭目以待:

提示超過位元組限制!!!

答案:mysql記錄中,如果有任何乙個字段允許為空,那麼系統會自動從整個記錄中保留乙個位元組來儲存null。如果想釋放該位元組,那麼所有字段設定 not null(無論有多少個字段允許為空,只會保留乙個位元組去儲存null)。

create table my_utf8(

name varchar(21844),

age tinyint

)charset utf8;

--錯誤!!

下面語句正確:

create table my_utf8(

name varchar(21843),

age tinyint,

age2 smallint

)charset utf8;

--正確 !!

create table my_utf8(

name varchar(21844) not null,

age tinyint not null

)charset utf8;

--正確 !!

請務必使用text文字字串!!

mysql中text文字字串不占用記錄長度,額外儲存(正確理解應是文字字串的資料內容額外儲存,不占用記錄長度)。

但是text文字字串也是記錄的一部分,那麼一定需要占用記錄的部分長度–10個位元組(儲存資料的位址與長度)!

證明如下:

建立失敗!!將content設定為not null 再測試:

建立成功!!!

MySQL的記錄長度

mysql的記錄長度 mysql預設規定一條記錄最大的長度是65535位元組,所有的字段加在一起所佔的位元組數不能超過65535。但是mysql中字段的長度有的時使用位元組來規定int,有些字段型別是使用字元個數來規定的。1個漢字所佔的是多少?根據字元編碼而定,latin1字符集1個字母佔據1個位元...

變數儲存與長度

研究實驗三 在學習組合語言的時候,提供了很多種定址方式,便於我們找到記憶體單元位址,我們關注資料,無非關注資料的兩個量 資料存放的位置 資料有多大。那麼,在c語言中,我們如何使用記憶體儲存資料,使得我們能夠達到和彙編一樣的水平 即我們清楚的知道我們的資料在哪,我們知道我們的資料與多大?下面通過實驗一...

mysql整型儲存位元組與最大長度設定

分析mysql資料型別的長度 mysql有幾種資料型別可以限制型別的 長度 有char length varchar length tinyint length smallint length mediumint length int length bigint length float lengt...