說明:本文是作者對MySQL資料庫數據存儲類型的小小總結。 Numeric Type (數字類型) 1、TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT主要根據存儲位元組長度不一樣劃分: TINYINT:1位元組 SMALLINT:2位元組 MEDIUMINT:3位元組 INT:4 ...
說明:本文是作者對MySQL資料庫數據存儲類型的小小總結。
Numeric Type (數字類型)
1、TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
主要根據存儲位元組長度不一樣劃分:
-
TINYINT:1位元組
-
SMALLINT:2位元組
-
MEDIUMINT:3位元組
-
INT:4位元組
-
BIGINT:8位元組
如果不需要符號數時,建議加上unsigned,會擴充存儲長度一倍,提高存儲性能。如TINYINT UNSIGNED(0~255)/TINYINT(-128~127)。
2、DECIMAL/NUMERIC
DECIMAL與NUMERIC一樣,二進位形式存儲數字類型,如DECIMAL(4,2)表示存儲一個小數點後兩位總共4位精度的數字,範圍是-99.99~99.99。總位數最大數字是65。
3、FLOAT和DOUBLE
FLOAT是4位元組存儲,DOUBLE雙精度是8位元組存儲。FLOAT(6,4)表示存儲一個小數點後四位總共6位精度的數字,如果小數位有超出則四捨五入。如把99.0000990存進去,則實際上存的是99.0001,這會讓數字失真,所以對於銀行賬號金額要求高精度的,則可以換成雙精度來存儲,或者對原數字小數點左移存儲。
String Type (字元類型)
1、CHAR和VARCHAR
CHAR
是固定字元長度,且最大字元長度為255=2e8-1,處理速度比VARCHAR快,但容易浪費存儲空間。如CHAR(10)表示固定分配10個字元長度存儲空間,當存儲'PHP'時,就浪費了7個字元長度的存儲空間。對於字元後尾的空格,CHAR需要做處理。VARCHAR
是可變長度,根據字元實際長度分配存儲空間,最大字元長度為65535=2e16-1。VARCHAR(10)表示最大存儲10個字元長度的字元串,存儲'PHP'時只分配3個存儲空間,節約存儲空間。預設使用InnoDB引擎時,使用VARCHAR比較好。一般用VARCHAR類型比較多。
2、BINARY和VARBINARY
BINARY/VARBINARY
和CHAR/VARCHAR
類似,只不過BINARY/VARBINARY存儲的是二進位字元,長度也表示位元組長度而不是字元長度(ASCII編碼一個英文字母1個位元組一個漢字2個位元組;UTF-8編碼一個英文字母1個位元組一個漢字3個位元組)。
3、BLOB和TEXT
BLOB
存儲大數據量的二進位數據,比如一張圖片。BLOB分為:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,根據存儲位元組最大長度分類。TEXT
存儲大數據量的字元串數據,TEXT分為:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,根據存儲文本最大長度分類。
4、ENUM
枚舉類型,每一個值都有對應的索引index。最大兩個位元組存儲,65535個不同成員。註意的是:
表中欄位:numbers ('0', '1', '2')
insert into test(numbers) values (2),('2'),('3');
select * from test;
會返回:
numbers
-
1
-
2
-
2
這說明,存儲整形2時把2當做索引存的是第二個值'1',存儲字元'2'時就是字元'2',存儲字元'3'時把'3'當做索引3,存的是'2'。
5、SET
集合類型,與ENU類似,最多包含64個成員。
CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
SELECT * FROM myset;
會顧慮掉重覆數據:
Date and Time Type (日期和時間類型)
DATE、TIME、DATETIME、TIMESTAMP、YEAR
預設格式為:
-
DATE: 1000-01-01 ~ 9999-12-31
-
TIME: 00:00:01 ~ 23:59:59
-
DATETIME: 1000-01-01 00:00:00 ~ 9999-12-31 59:59:59
-
TIMESTAMP: 1970-00-01 00:00:00 ~ 2038-01-19 03:14:07
-
YEAR: 0001 ~ 9999
其中,比較方便的一個是timestamp
,它可以根據時區不同進行轉換,很好用。