
日期:2008-07-09 作者:喜騰小二 來源:PHPChina
char是一種固定長度的類型,varchar則是一種可變長度的類型
char(M)類型的資料列裡,每個值都占用M位元組,如果某個長度小於M,MySQL就會在它的右邊用空格字元補足.(在檢索操作中那些填補出來的空格字元將被去掉)在varchar(M)類型的資料列裡,每個值隻占用剛好夠用的位元組再加上一個用來記錄其長度的位元組(即總長度為L+1位元組).
在MySQL中用來判斷是否需要進行對據列類型轉換的規則
1、在一個資料表裡,如果每一個資料列的長度都是固定的,那麼每一個資料行的長度也將是固定的.
2、只要資料表裡有一個資料列的長度的可變的,那麼各資料行的長度都是可變的.
3、如果某個資料表裡的資料行的長度是可變的,那麼,為了節約存儲空間,MySQL會把這個資料表裡的固定長度類型的資料列轉換為相應的可變長度類型.
例外:長度小於4個字元的char資料列不會被轉換為varchar類型
對於MyISAM表,盡量使用Char,對於那些經常需要修改而容易形成碎片的myisam和isam資料表就更是如此
對於MyISAM表,盡量使用Char,對於那些經常需要修改而容易形成碎片的myisam和isam資料表就更是如此,它的缺點就是占用磁碟空間;
對於InnoDB表,因為它的資料行內部存儲格式對固定長度的資料行和可變長度的資料行不加區分(所有資料行共用一個表頭部分,這個標頭部分存放着指嚮各有關資料列的指針),所以使用char類型不見得會比使用varchar類型好。事實上,因為char類型通常要比varchar類型占用更多的空間,所以從減少空間占用量和減少磁碟i/o的角度,使用varchar類型反而更有利.
http://blog.csdn.net/weilian000/archive/2007/07/19/1699432.aspx