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...