MySQL資料庫教程的varchar類型在5.0.3以下的版本中的最大長度限制為255,其資料範圍可以是0~255。
在MySQL5.0.3及以上的版本中,varchar資料類型的長度支援到了65535,也就是說可以存放65532個位元組的資料,起始位和結束位佔去了3個位元組,也就是說,在5.0.3以下版本中需要使用固定的TEXT或BLOB格式存放的資料可以在高版本中使用可變長的varchar來存放,這樣就能有效減少資料庫檔案的大小。
1、限制規則
欄位的限制在欄位定義的時候有以下規則:
a)儲存限制
varchar欄位是將實際內容單獨儲存在聚簇索引之外,內容開頭用1到2個位元組表示實際長度(長度超過255時需要2個位元組),因此最大長度不能超過65535。
b)編碼長度限制
字元類型若為gbk,每個字元最多佔2個位元組,最大長度不能超過32766;
字元類型若為utf8,每個字元最多佔3個位元組,最大長度不能超過21845。
若定義的時候超過上述限制,則varchar欄位會被強行轉為text類型,併產生warning。
c)行長度限制
導致實際應用中varchar長度限制的是一個行定義的長度。MySQL要求一個行的定義長度不能超過65535。若定義的表長度超過這個值,則提示ERROR1118(42000):Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.YouhavetochangesomecolumnstoTEXTorBLOBs。
2、計算例子
舉兩個例說明一下實際長度的計算。
a)若一個表只有一個varchar類型,如定義為createtablet4(cvarchar(N))charset=gbk;則此處N的最大值為(65535-1-2)/2=32766。
減1的原因是實際行儲存從第二個位元組開始';
減2的原因是varchar頭部的2個位元組表示長度;
除2的原因是字元編碼是gbk。
b)若一個表定義為createtablet4(cint,c2char(30),c3varchar(N))charset=utf8;則此處N的最大值為(65535-1-2-4-30*3)/3=21812。
減1和減2的原因與上例相同;
減4的原因是int類型的c佔4個位元組;
減30*3的原因是char(30)佔用90個位元組,編碼是utf8。
如果varchar超過上述的b規則,被強制轉成text類型,則每個欄位佔用定義長度為11位元組,當然這已經不是“varchar”了。
關於MySQL資料庫中varchar的限制規則的知識就介紹到這裡了,希望本次的介紹能夠對您有所收穫