詳解char和varchar的區別


    MySQL中的字符串有兩個常用的類型:char和varchar,二者各有優勢,下面我們來詳細分析一下。


1、char(n)類型

    char類型時定長的類型,即當定義的是char(10),輸入的是"abc"這三個字符時,它們佔的空間一樣是10個字節,包括7個空字節。當輸入的字符長度超過指定的數時,char會截取超出的字符。而且,當存儲char值時,MySQL是自動刪除輸入字符串末尾的空格。

    char是適合存儲很短的、一般固定長度的字符串。例如,char非常適合存儲密碼的MD5值,因爲這是一個定長的值。對於非常短的列,char比varchar在存儲空間上也更有效率。


2、varchar(n)類型

     varchar(n)類型用於存儲可變長的,長度爲n個字節的可變長度且非Unicode的字符數據。n必須是介於1和8000之間的數值,存儲大小爲輸入數據的字節的實際長度+1/2. 比如varchar(10), 然後輸入abc三個字符,那麼實際存儲大小爲3個字節。除此之外,varchar還需要使用1或2個額外字節記錄字符串的長度,如果列的最大長度小於等於255字節(是定義的最長長度,不是實際長度),則使用1個字節表示長度,否則使用2個字節來表示。


    所以,從空間上考慮,varcahr較合適;從效率上考慮,用char合適。二者之間需要權衡。



    除了char和varchar之外,還有一種nchar、nvarchar(n),包含n個字符的可變長度爲unicode字符數據。n的值必須介於1~4000之間,直接的存儲大小是說輸入字符個數的兩倍,所輸入的數據字符長度可以爲零。從名字上看,多了一個n,表示存儲的是unicode數據類型的字符,這是爲了存儲漢字用的,1個英文字母或者數字佔用的字符爲1個,一個漢字佔用2個字符,那麼對於有中英文混合的字符串,我們需要定義nvarchar類型。Unicode字符集就是爲了解決字符集這種不兼容的問題而產生的,它所有的字符都用兩個字節表示,即英文字符也是用兩個字節表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較起來,nchar、nvarchar則最多存儲4000個字符,不論是英文還是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。可以看出使用nchar、nvarchar數據類型時不用擔心輸入的字符是英文還是漢字,較爲方便,但在存儲英文時數量上有些損失。所以一般來說,如果含有中文字符,用nchar/nvarchar,如果純英文和數字,用char/varchar。


    還有,text類型。其存儲可變長度的非Unicode數據,最大長度爲2^31-1(2,147,483,647)個字符。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章