1. 程式人生 > >MySQL資料庫的字串型別詳解(01)

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為定長,VARCHARTEXT為變長

CHAR會造成空間浪費,但是有速度優勢                      (浪費空間,節約時間

VARCHARTEXT節省了空間,但是速度就不如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)、時間型別。根據要求的精度,子型別在每個分型別中都可以使用。