MySQL提供的數據類型包括數值類型(整數類型和小數類型)、字元串類型、日期類型、複合類型(複合類型包括enum類型和set類型)以及二進位類型 。 1,整數類型: 整數類型的數,預設情況下既可以表示正整數又可以表示負整數(此時稱為有符號數)。如果只希望表示零和正整數,可以使用無符號關鍵字“unsi ...
MySQL提供的數據類型包括數值類型(整數類型和小數類型)、字元串類型、日期類型、複合類型(複合類型包括enum類型和set類型)以及二進位類型 。
1,整數類型:
整數類型的數,預設情況下既可以表示正整數又可以表示負整數(此時稱為有符號數)。如果只希望表示零和正整數,可以使用無符號關鍵字“unsigned”對整數類型進行修飾。
例如:score tinyint unsigned
各個類別存儲空間及取值範圍。
2,小數類型
decimal(length, precision)用於表示精度確定(小數點後數字的位數確定)的小數類型,length決定了該小數的最大位數,precision用於設置精度(小數點後數字的位數)。 例如: decimal (5,2)表示小數取值範圍:999.99~999.99 decimal (5,0)表示: -99999~99999的整數。
3,字元串
char()與varchar(): 例如對於簡體中文字元集gbk的字元串而言,varchar(255)表示可以存儲255個漢字,而每個漢字占用兩個位元組的存儲空間。假如這個字元串沒有那麼多漢字,例如僅僅包含一個‘中’字,那麼varchar(255)僅僅占用1個字元(兩個位元組)的儲存空間;而char(255)則必須占用255個字元長度的存儲空間,哪怕裡面只存儲一個漢字。
4,日期類型。
date表示日期,預設格式為‘YYYY-MM-DD’; time表示時間,格式為‘HH:ii:ss’; year表示年份; datetime與timestamp是日期和時間的混合類型,格式為'YYYY-MM-DD HH:ii:ss'
datetime與timestamp都是日期和時間的混合類型,區別在於: 表示的取值範圍不同,datetime的取值範圍遠遠大於timestamp的取值範圍。 將NULL插入timestamp欄位後,該欄位的值實際上是MySQL伺服器當前的日期和時間。 同一個timestamp類型的日期或時間,不同的時區,顯示結果不同。
5,複合類型。
MySQL 支持兩種複合數據類型:enum枚舉類型和set集合類型。 enum類型的欄位類似於單選按鈕的功能,一個enum類型的數據最多可以包含65535個元素。 set 類型的欄位類似於覆選框的功能,一個set類型的數據最多可以包含64個元素。
6,二進位類型。
二進位類型的欄位主要用於存儲由‘0’和‘1’組成的字元串,因此從某種意義上將,二進位類型的數據是一種特殊格式的字元串。 二進位類型與字元串類型的區別在於:字元串類型的數據按字元為單位進行存儲,因此存在多種字元集、多種字元序;而二進位類型的數據按位元組為單位進行存儲,僅存在二進位字元集binary。
7,選擇合適的數據類型。
選擇合適的數據類型,不僅可以節省儲存空間,還可以有效地提升數據的計算性能。
(1)在符合應用要求(取值範圍、精度)的前提下,儘量使用“短”數據類型。
(2)數據類型越簡單越好。
(3)在MySQL中,應該用內置的日期和時間數據類型,而不是用字元串來存儲日期和時間。
(4)儘量採用精確小數類型(例如decimal),而不採用浮點數類型。使用精確小數類型不僅能夠保證數據計算更為精確,還可以節省儲存空間,例如百分比使用decimal(4,2)即可。
(5)儘量避免NULL欄位,建議將欄位指定為NOT NULL約束。