MySQL之vachar

541732025發表於2014-06-23
5.0.3之前,varchar(20),指的是20位元組,如果存放UTF8漢字時,只能存6個(每個漢字3位元組),最大0-255個位元組。

5.0.3之後,varchar(20),指的是20字元,無論存放的是數字、字母還是UTF8漢字(每個漢字3位元組),都可以存放20個,最大大小是65532位元組(這個表所有列加起來大小)
在建表時,當超過長度限制,MySql會報錯,建議使用TEXT或者BLOB而當INSERT資料時,如果VALUE超出VARCHAR宣告時的長度,則會自動被截斷。

varchar 欄位是將實際內容單獨儲存在聚簇索引之外,內容開頭用1到2個位元組表示實際長度(長度超過255時需要2個位元組),
另外,開頭還有1個位元組存放其它一些控制資訊。


a) 若一個表只有一個varchar型別,如定義為
  create table t1(c varchar(N)) charset = gbk;
  則此處N的最大值為(65535-1-2)/2= 32766。
  減1的原因是實際行儲存從第二個位元組開始;
  減2的原因是varchar頭部的2個位元組表示長度;
  除2的原因是字元編碼是gbk。

如下圖:使用最大值32766時,正確建立。


如果若使用32767,MySql則會報出異常,建立失敗。


b) 若一個表定義為
  create table t2(i int, c char(30), ch varchar(N)) charset=utf8;
  則此處N的最大值為 (65535-1-2-4-30*3)/3=21812
  減1和減2與上例相同;
  減4的原因是int型別的c佔4個位元組;
  減30*3的原因是char(30)佔用90個位元組,編碼是utf8。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1191886/,如需轉載,請註明出處,否則將追究法律責任。

相關文章