msyql 字節問題

MySQL 數據庫的varchar類型在4.1如下的版本中的最大長度限制爲255,其數據範圍能夠是0~255或1~255(根據不一樣版本數據庫來定)。在 MySQL5.0以上的版本中,varchar數據類型的長度支持到了65535,也就是說能夠存放65532個字節的數據,起始位和結束位佔去了3個字 節,也就是說,在4.1或如下版本中須要使用固定的TEXTBLOB格式存放的數據可使用可變長的varchar來存放,這樣就能有效的減小數據庫文 件的大小。
MySQL 數據庫的varchar類型在4.1如下的版本中,nvarchar(存儲的是Unicode數據類型的字符)無論是一個字符仍是一個漢字,都存爲2個字節 ,通常用做中文或者其餘語言輸入,這樣不容易亂碼 ;varchar: 漢字是2個字節,其餘字符存爲1個字節 ,varchar適合輸入英文和數字。
4.0版本如下,varchar(20),指的是20字節,若是存放UTF8漢字時,只能存6個(每一個漢字3字節) ;
5.0版本以上,varchar(20),指的是20字符,不管存放的是數字、字母仍是UTF8漢字(每一個漢字3字節),均可以存放20個,最大大小是65532字節
varchar(20)在Mysql4中最大也不過是20個字節,可是Mysql5根據編碼不一樣,存儲大小也不一樣,具體有如下規則:  
a) 存儲限制
varchar 字段是將實際內容單獨存儲在聚簇索引以外,內容開頭用1到2個字節表示實際長度(長度超過255時須要2個字節),所以最大長度不能超過65535。
b) 編碼長度限制
字符類型若爲gbk,每一個字符最多佔2個字節,最大長度不能超過32766;
字符類型若爲utf8,每一個字符最多佔3個字節,最大長度不能超過21845。
若定義的時候超過上述限制,則varchar字段會被強行轉爲text類型,併產生warning。
c) 行長度限制
致使實際應用中varchar長度限制的是一個行定義的長度。 MySQL要求一個行的定義長度不能超過65535。若定義的表長度超過這個值,則提示
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

---------------------------------------------------------------------
mysql的vachar字段的類型雖然最大長度是65535,可是並非能存這麼多數據,最大能夠到65533(不容許非空字段的時候),當容許非空字段的時候只能到65532。

總結char,varchar,text區別 

長度的區別,char範圍是0~255,varchar最長是64k,可是注意這裏的64k是整個row的長度,要考慮到其它的column,還有若是存在not null的時候也會佔用一位,對不一樣的字符集,有效長度還不同,好比utf8的,最多21845,還要除去別的column,可是varchar在通常狀況下存儲都夠用了。若是遇到了大文本,考慮使用text,最大能到4G。mysql

效率來講基本是char>varchar>text,可是若是使用的是Innodb引擎的話,推薦使用varchar代替charsql

char和varchar能夠有默認值,text不能指定默認值數據庫

相關文章
相關標籤/搜索