MySQL資料庫的字串型別詳解(01)
Mysql的資料型別主要分為三類:數字型別、字串(字元)型別、日期和時間型別,由於時間緊迫,根據學習的需要
數字型別暫不做詳解,等待有時間了在修改此文件,此文主要介紹mysql 資料型別中的字串型別;
注:資料型別支援附加引數,例如:float(7,3),7代表顯示的數值不能超過7,3表示小數點後面有三位數字;
字串型別詳解
.字串型別可分為3類,普通的文字字串型別(char和varchar)、可變型別(text和blob)和特殊型別(set和enum)
1.普通的文字字串型別
char char可以附加引數即:char(n) ,n表示位元組數 . |
char(n)與char都屬於定長字串 取值範圍為0-255個字元。 char(n)在儲存的時候,後面會用空格填充到指定的長度,檢索的時候後面的空格會去掉。例如:儲存字串’LENOVO ’,共6個英文字母,char(60): 6個字母,補齊54個空格,實際佔用60個位元組(一個英文字母佔用一個字元)。char會造成空間浪費,但是有速度優勢 。 |
varchar; varchar也可以指定位元組數:varchar(n) |
在mysql5.0以前,varchar或varchar(n)的取值範圍最大為0-255個字元,mysql5.0版本以後,,varchar(n)或varchar的取值範圍最大為65535個位元組長度;(所以參考書中如果寫的varchar(n)取值範圍是0-255,它是寫的Mysql5.0版本之前的取值範圍。) varchar或varchar(n)屬於(可變字串)變長字串,varchar(n)後面不會用空格代替。例如:儲存字串’LENOVO ’,共6個英文字母,VARCHAR(60) :6個字母,實際佔用6+1個位元組。 特點1:它比使用固定長度型別(char型別)佔用更少的儲存空間; 2. varchar(n)會使用額外的1-2個位元組儲存值長度。列長度n<=255使用一位元組儲存,n>255使用2位元組儲存。例如:varchar(10)會佔用11位元組儲存空間;varchar(500)會總共佔用502個位元組儲存空間; 3. varchar型別的變化 MySQL 資料庫的varchar型別在4.1以下的版本中的最大長度限制為255,其資料範圍可以是0~255或1~255(根據不同版本資料庫來定)。在 MySQL5.0以上的版本中,varchar資料型別的長度支援到了65535,也就是說可以存放65532個位元組的資料,起始位和結束位佔去了3個字 節,也就是說,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的資料可以使用可變長的varchar來存放,這樣就能有效的減少資料庫文 件的大小。 MySQL 資料庫的varchar型別在4.1以下的版本中,nvarchar(儲存的是Unicode資料型別的字元)不管是一個字元還是一個漢字,都存為2個位元組 ,一般用作中文或者其他語言輸入,這樣不容易亂碼 ;varchar: 漢字是2個位元組,其他字元存為1個位元組 ,varchar適合輸入英文和數字。 4.0版本以下,varchar(20),指的是20位元組,如果存放UTF8漢字時,只能存6個(每個漢字3位元組) ;5.0版本以上,varchar(20),指的是20字元,無論存放的是數字、字母還是UTF8漢字(每個漢字3位元組),都可以存放20個,最大大小是65532位元組 ;varchar(20)在Mysql4中最大也不過是20個位元組,但是Mysql5根據編碼不同,儲存大小也不同,具體有以下規則: a) 儲存限制 varchar 欄位是將實際內容單獨儲存在聚簇索引之外,內容開頭用1到2個位元組表示實際長度(長度超過255時需要2個位元組),因此最大長度不能超過65535。 b) 編碼長度限制 字元型別若為gbk,每個字元最多佔2個位元組,最大長度不能超過32766; 字元型別若為utf8,每個字元最多佔3個位元組,最大長度不能超過21845。 若定義的時候超過上述限制,則varchar欄位會被強行轉為text型別,併產生warning。 c) 行長度限制 導致實際應用中varchar長度限制的是一個行定義的長度。 MySQL要求一個行的定義長度不能超過65535。若定義的表長度超過這個值,則提示 ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。 |
varchar與char比較 |
varchar比較節約儲存空間,但效率較低 char效率比varchar效率高,速度快,但比較儲存空間。 |
資料的檢索效率由高到低:char>varchar>text(下文中將講解test型別的字串)
2.可變型別(TEXT與BLOB)
a)text:用來儲存長文字;
b)BLOB:BLOB二進位制大物件,是一個可以儲存二進位制檔案的容器,在計算機中,BLOB常常是資料中用來儲存二進位制檔案的欄位類型別。BLOB是一個大檔案,典型的BLOB是一張圖片或一個聲音,由於他們的尺寸,必須使用特殊的方式來處理。
text與blob,它們的大小可以改變,text型別適合儲存長文字,而blob型別適合儲存二進位制資料,支援任何資料,如文字、聲音和影象。text和blob型別的介紹如下。
型別 | 最大長度 | 說明 |
TINYBOLB(非常小的BOLB(二進位制大物件)) | 0-255位元組 |
小的BLOB欄位。 不超過255個字元的二進位制字串 |
BLOB | 0-65535位元組 |
常規的BLOB欄位 (二進位制形式的長文字資料) |
MEDIUMBLOB | 0-16777215位元組 |
中型BLOB欄位 (二進位制形式的中等長度文字資料) |
LONGBLOB | 0-4294967295位元組 |
長BLoB欄位 (二進位制形式的極大文字資料) |
TINYTEXT | 0-255位元組 |
小的TEXT欄位 (短文字字串) |
TEXT | 0-65535位元組 |
常規的TEXT 欄位 (長文字資料) |
MEDIUMTEXT | 0-16777215位元組 |
中型TEXT欄位 (中等長度的文字資料) |
LONGTEXT | 0-4294967295位元組 | 長TEXT欄位(極大地文字資料) |
注:CHAR為定長,VARCHAR和TEXT為變長
CHAR會造成空間浪費,但是有速度優勢 (浪費空間,節約時間
VARCHAR和TEXT節省了空間,但是速度就不如CHAR (浪費時間,節約空間)
【建議】:
(1)經常變化的欄位用VARCHAR
(2)知道固定長度的用CHAR
(3)儘量用VARCHAR
(4)超過255位元組的只能用VARCHAR或者TEXT
(5)能用VARCHAR的地方不用TEXT ,因為檢索效率Varchar比Text高效.
資料的檢索效率是:char>varchar>text 3.日期和時間類
lMySQL 帶有 5 個不同的日期型別可供選擇
被分成簡單的日期(DATE)、時間型別(TIME),和混合日期和時間(DATETIME)、時間型別。根據要求的精度,子型別在每個分型別中都可以使用。