他們的儲存方式和資料的檢索方式都不一樣。
資料的檢索效率是:char>varchar>text
空間佔用方面,要具體情況具體分析了。
CHAR(M) M個位元組,0
VARCHAR(M) L+1個位元組,其中L
TEXT L+2個位元組,其中L
Char為定長,varchar,text為變長
Char在儲存的時候,後面(右邊)會用空格填充到指定的長度,在檢索的時候後面的空格會去掉,所以檢索出來的資料需要再用什麼trim之類的函式去處理。(與sql server可能有些不同)
Varchar在儲存的時候,不進行填充。當值儲存和檢索時尾部的空格仍保留。
TEXT列不能有預設值,儲存或檢索過程中,不存在大小寫轉換.
當儲存的字元超過他們定義的長度時候,如果不是在sql伺服器的嚴格模式下,都會自動擷取合適的欄位儲存,而不會出現錯誤。但是,如果是中文的話同樣要報錯誤:)比如定義char(4),然後insert (‘c哈哈’).
注意一點的,Char,Varchar不像數值型別,有系統預設長度,所以必須在括號裡定義長度,可以有預設值
text不可以寫預設值,後面如果指定長度,不會報錯誤,但是這個長度是不起作用的,意思就是你插入資料的時候,超過你指定的長度還是可以正常插入
他們的儲存方式和資料的檢索方式都不一樣。
資料的檢索效率是:char>varchar>text
空間佔用方面,要具體情況具體分析了。
CHAR(M) M個位元組,0
VARCHAR(M) L+1個位元組,其中L
TEXT L+2個位元組,其中L
Char為定長,varchar,text為變長
Char在儲存的時候,後面(右邊)會用空格填充到指定的長度,在檢索的時候後面的空格會去掉,所以檢索出來的資料需要再用什麼trim之類的函式去處理。(與sql server可能有些不同)
Varchar在儲存的時候,不進行填充。當值儲存和檢索時尾部的空格仍保留。
TEXT列不能有預設值,儲存或檢索過程中,不存在大小寫轉換.
當儲存的字元超過他們定義的長度時候,如果不是在sql伺服器的嚴格模式下,都會自動擷取合適的欄位儲存,而不會出現錯誤。但是,如果是中文的話同樣要報錯誤:)比如定義char(4),然後insert (‘c哈哈’).
注意一點的,Char,Varchar不像數值型別,有系統預設長度,所以必須在括號裡定義長度,可以有預設值
text不可以寫預設值,後面如果指定長度,不會報錯誤,但是這個長度是不起作用的,意思就是你插入資料的時候,超過你指定的長度還是可以正常插入