MySQL基礎教程:CHAR和VARCHAR類型
最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!
我要咨詢MySQL基礎教程:CHAR和VARCHAR類型,CHAR和VARCHAR類型是類似的,但是在他們被存儲和檢索的方式不同。 其具體的異同為:
當給定一個CHAR列的值時,其長度將被被修正為在你創建表時所聲明的長度。長度可以是1和255之間的任何值。(在MySQL 3.23中,CHAR長度可以是0~255。) 當CHAR值被存儲時,他們被用空格在右邊填補到指定的長度。當CHAR值被檢索時,拖后的空格被刪去。
在VARCHAR列中的值是變長字符串。你可以聲明一個VARCHAR列是在1和255之間的任何長度,就像對CHAR列。然而,與CHAR類型相反,VARCHAR值只存儲所需的字符,外加一個字節記錄長度,值不被填補;相反,當值被存儲時,拖后的空格被刪去。(這個空格刪除不同于ANSI SQL規范。)
如果你把一個超過列最大長度的值賦給一個CHAR或VARCHAR列,值被截斷以適合串類型。
例如,我們用下表來說明存儲一系列不同的串值到CHAR(4)和VARCHAR(4)列的結果:
表1-7 CHAR類型和VARCHAR類型的對比
值 |
CHAR(4) |
存儲需求 |
VARCHAR(4) |
存儲需求 |
'' |
' ' |
4字節 |
'' |
1字節 |
'ab' |
'ab ' |
4字節 |
'ab' |
3字節 |
'abcd' |
'abcd' |
4字節 |
'abcd' |
5字節 |
'abcdefgh' |
'abcd' |
4字節 |
'abcd' |
5字節 |
雖然實際存儲的值并不一樣,但是查詢時,這兩種類型是一致的,因為CHAR(4)類型多于的空格將被忽略。
需要注意的是,除了少數情況外,在同一個表中不能混用 CHAR 和 VARCHAR這兩種類型,你只能使用其中之一。如果你創建表時,包括這兩種類型,在一般情況下,MySQL 會將列從一種類型轉換為另一種類型。這樣做的原因如下:
行定長的表比行可變長的表容易處理,效率更高。
只有所有的類型是定長時,行才是定長的,才能提高性能。
有時為了節省存儲空間,使用了變長類型,在這種情況下最好也將定長列轉換為可變長列。
這表示,如果表中有 VARCHAR 列,那么表中不可能同時有 CHAR 列;MySQL 會自動地將它們轉換為 VARCHAR 列。
轉換的規則:
長度小于4的VARCHAR被改變為CHAR。
如果在一個表中的任何列有可變長度,結果是整個行是變長的。因此, 如果一張表包含任何變長的列(VARCHAR、TEXT或BLOB),所有大于3個字符的CHAR列被改變為VARCHAR列。
例如,我們創建下面一個表:
CREATE TABLE ch_type
(
ch1 char(3),
ch2 varchar(3),
ch3 char(4),
ch4 varchar(4)
)
然后查看表的結構:
DESCRIBE ch_type
在MySQL3.23上結果為:
+-------+---------------+
| Field | Type |
+-------+---------------+
| ch1 | char(3) |
| ch2 | char(3) |
| ch3 | varchar(4) |
| ch4 | varchar(4) |
+-------+---------------+