MySQL支持的數據類型
數值類型
整數類型 | 字節 | 最小值 | 最大值 |
TINYINT | 1 | ||
SMALLINT | 2 | ||
MEDIUMINT | 3 | ||
INT、INTEGER | 4 | ||
BIGINT | 5 | ||
浮點數類型 | |||
FLOAT | 4 | ||
DOUBLE | 8 | ||
定點數類型 | |||
DEC(M, D) | M + 2 | 最大取值範圍與double相同,給定DECIMAL的有效值範圍由M和D決定 | |
DECIMAL(M, D) | |||
位類型 | |||
BIT(M) | 1 ~ 8 | BIT(1) | BIT(64) |
P53)對於整型數據,MySQL還支持在類型名稱後面的小括號內指定位寬,例如int(5)表示當數值寬度小於5位的時候在數字前面填滿寬度,如果不顯示指定寬度則默認位int(11)。一般配合zerofill
位寬對於插入數字的大小沒有任何影響,不會截斷超出位寬的部分,它依然按照int類型的實際精度進行保存,這時寬度格式已經沒有任何意義,左邊不會再填充任何的“0”字符。
如果一個列指定為zerofill,則MySQL自動為該列添加UNSIGNED屬性。
P54)AUTO_INCREMENT
在插入NULL到一個AUTO_INCREMENT列時,MySQL插入一個比當前最大值大1的值。一個表中最多只能有一個AUTO_INCREMENT列。對於任何想要使用AUTO_INCREMENT的列,應該定義為NOT NULL,並定義為PRIMARY KEY或定義為UNIQUE鍵。
對於小數的表示,MySQL分為兩種方式:浮點數和定點數。浮點數包括float(單精度)和double(雙精度),而定點數則只有decimal一種表示。定點數在MySQL內部以字符串形式存放,比浮點數更精確,適合用來表示貨幣等精度高的數據。
浮點數和定點數都可以用類型名稱後加“(M,D)”的方式進行表示,“(M,D)”表示該值一共顯示M位數字(整數位+小數位),其中D位位於小數點後面,M和D又稱為精度和標度。浮點數後面跟“(M,D)”的用法是非標準用法,如果要用於數據庫的遷移,則最好不要這麽使用。DECIMAL在不指定精度時,默認的整數位為10,默認的小數位為0。
在操作出現出現warning提醒時,可以通過show warnings;
對於BIT(位)類型,用於存放位字段,BIT(M)可以用來存放多為二進制數,M範圍從1~64,如果不寫則默認為1位。對於位字段,直接使用SELECT命令將不會看到結果,可以用bin(column name)(顯示為二進制格式)或者hex(column name)(顯示為十六進制)函數進行讀取。
日期時間類型
- 年月日,通常用DATE來表示。
- 年月日時分秒,通常用DATETIME表示。
- 時分秒,通常用TIME表示。
日期和時間類型 | 字節 | 最小值 | 最大值 |
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 19700101080001 | 2038年的某個時刻 |
TIME | 3 | -838:59:59 | 838:59:59 |
YEAR | 1 | 1901 | 2155 |
如果需要經常插入或者更新日期為當前系統時間,則通常使用TIMESTAMP來表示,TIMESTAMP值返回後顯示為“YYYY-MM-DD HH:MM:SS”格式的字符串,顯示寬度固定為19個字符,如果想要獲得數字值,應在TIMESTAMP列添加“+0”。
超出日期值的有效範圍,在默認的SQLMode下系統會提示錯誤,並將以零值來進行存儲。
now()函數返回當前的系統時間。
MySQL只給表中的第一個TIMESTAMP字段設置默認值為系統日期,如果有第二個TIMESTAMP類型,則默認值設置為0值。可以給其他列的TIMESTAMP默認值設為其他常量日期,但不能再修改為current_timestamp,因為MySQL規定TIMESTAMP類型的字段只能有一列的默認值為current_timestamp。
TIMESTAMP還有一個重要特點,就是和時區相關。當插入日期時,會先轉換為本地時區後存放;而從數據庫裏面取出時,也同樣需要將日期轉換為本地時區後顯示。這樣,兩個不同時區的用戶看到的用一個日期可能是不一樣的。
show variables like ‘time_zone‘; 查看當前時區
set time_zone=‘+9:00‘; 修改時區為東九區
TIMESTAMPDE取值範圍為19700101080001到2038年的某一天,因此它不適合存放比較久遠的日期。
字符串類型
char和varchar的區別在於char列的長度固定為創建表時聲明的長度,長度可以從0~255的任何值,varchar列中的值為可變字符串長度可以指定為0~65535之間的值。在存儲字符串時,char列刪除了尾部的空格,而varchar則保留字符串尾部的空格。
MySQL支持的數據類型