MySQL的char和varchar型別的區別

2021-05-24 03:27:50 字數 1004 閱讀 5724

char和varchar型別相似,但是它們的儲存和檢索方式不同。在mysql5.0.3,它們在最大長度和是否保留尾部空格也不相同。

char和varchar定義了字串的最大長度。例如,char(30)可以放30個字元。

char列的長度在你建表的時候,就是你定義的固定長度。值的範圍是0~255。char值儲存的時候,右部以空格來填充到指定的長度。當檢索char的時候,會自動去掉尾部的空格。

varchar列是變長的。在mysql5.0.3之前可以定義的長度是0~255,之後可以定義到0~65535。在mysql5.0.3及以後的版本中varchar列的有效長度,受行的最大值和使用的字元限制。

對比char,varchar,加上字首的資料長度是當做乙個位元組還是兩個位元組儲存。這個字首的長度表明了值的位元組數。如果值不超過255的話,這個列用乙個位元組的長度,如果這個值可能超過255個位元組,那麼就使用兩個位元組的長度。

如果嚴格的sql模式沒有啟用,你分配了乙個char或者varchar列超出了列的最大長度,那麼這個值就會被截短以填充列,這時候就會產生乙個警告。對於截短的非空格字元,你可以設定嚴格的sql模式,來產生乙個錯誤。

對於varchar列來說,sql模式在啟用的時候,大量的尾部空格在插入之前都會被截短,產生乙個警告。對於char列來說,不管sql模式是否被啟用,都會靜默地去掉插入值的過量的尾部空格。

varchar值儲存的時候是不會填充的。如何處理尾部空格,取決於版本。在mysql5.0.3中,當值儲存和檢索的時候,保留尾部空格,和標準的sql保持一致。在mysql5.0.3之前,值被儲存到varchar列的時候,尾部空格會被剔除。這樣也就意味著檢索值的時候,也不存在這些空格。

在mysql5.0.3之前,如果你需要乙個不去掉尾部空格的資料型別的時候,要考慮blob或者text型別。同樣當你儲存加密資料或者壓縮資料的時候,也要使用blob列,而不是char或者varchar列,來避免需要改變值的時候,尾部空格的潛在問題。

下面的**來說明char和varchar的儲存方式和顯示結果的差別。(假設列用的很簡單的字元,使用latin1編碼)

char 和char 的區別

1 char是乙個陣列定義,char 是指標定義 也稱char為靜態陣列,char 為動態陣列 2 指標和陣列的區別 1 指標和陣列的分配 陣列是開闢一塊連續的記憶體空間,陣列本身的識別符號 也就是通常所說的陣列名 代表整個陣列,可以使用sizeof來獲得陣列所佔據記憶體空間的大小 注意,不是陣列元...

char 和char 的區別

char c abc c 0 t char c1 def c1 0 t err 首先c1是乙個指標,它只是指向 def 這個記憶體塊。而 abc 是乙個常量區,不可以對其進行更改。而c定義的是乙個陣列,在分配記憶體時,會自動給它分配四個位元組的位址,並且會進行乙份拷貝工作,此時分配是在棧區進行的,是...

char 和char 的區別

之前在用到char 和char,用到srtncat,讓char對char 進行新增時執行會崩潰,之後做了一些分析和練習,對char 和char有了更深的理解。下面附上一些測試資料。include include include using namespace std int main cout do...