天天看點

mysql中char是什麼意思_mysql中char與varchar的差別

在建立資料庫表結構的時候,為了給一個String類型的資料定義一個資料庫的資料庫類型,一般參考的都是char或者varchar,這兩種選擇有時候讓人很糾結,今天想總結一下它們兩者的差別,明确一下選擇塔門的理由。

首先明确的是,char的長度是不可變的,而varchar的長度是可變的,也就是說,定義一個char[10]和varchar[10],如果存進去的是‘blog’,那麼char所占的長度依然為10,除了字元‘blog’外,後面跟六個空格,而varchar就立馬把長度變為4了,取資料的時候,char類型的要用trim()去掉多餘的空格,而varchar是不需要的。

盡管如此,char的存取數度還是要比varchar要快得多,因為其長度固定,友善程式的存儲與查找;但是char也為此付出的是空間的代價,因為其長度固定,是以難免會有多餘的空格占位符占據空間,可謂是以空間換取時間效率,而varchar是以空間效率為首位的。再者,char的存儲方式是,對英文字元(ASCII)占用1個位元組,對一個漢字占用兩個位元組;而varchar的存儲方式是,對每個英文字元占用2個位元組,漢字也占用2個位元組,兩者的存儲資料都非unicode的字元資料。

在MySQL中用來判斷是否需要進行對據列類型轉換的規則

1、在一個資料表裡,如果每一個資料列的長度都是固定的,那麼每一個資料行的長度也将是固定的.

2、隻要資料表裡有一個資料列的長度的可變的,那麼各資料行的長度都是可變的.

3、如果某個資料表裡的資料行的長度是可變的,那麼,為了節約存儲空間,MySQL會把這個資料表裡的固定長度類型的資料列轉換為相應的可變長度類型.

例外:長度小于4個字元的char資料列不會被轉換為varchar類型

對于MyISAM表,盡量使用Char,對于那些經常需要修改而容易形成碎片的myisam和isam資料表就更是如此,它的缺點就是占用磁盤空間;

對于InnoDB表,因為它的資料行内部存儲格式對固定長度的資料行和可變長度的資料行不加區分(所有資料行共用一個表頭部分,這個标頭部分存放着指向各有關資料列的指針),是以使用char類型不見得會比使用varchar類型好。事實上,因為char類型通常要比varchar類型占用更多的空間,是以從減少空間占用量和減少磁盤i/o的角度,使用varchar類型反而更有利.