在設計數據庫表時,其中一項重要步驟即是選擇表中字段的數據類型。
若是你選擇的是mysql做爲數據庫,必需要清楚mysql到底支持哪些數據類型呢?
整體來講包括數值型、字符串類型、日期和時間類型這麼幾大類。mysql
數值類型中又細分爲整數類型、浮點數類型、定點數類型和位類型。下面分別述之。sql
整數類型 | 佔用字節 | 範圍 |
---|---|---|
TINYINT | 1 | 有符號:[-128,127] 或無符號:[0,255] |
SMALLINT | 2 | 有符號:[-32768,32767]或無符號:[0,65535] |
MEDIUMINT | 3 | 有符號:[-8333608,8388607]或無符號:[0,1677215] |
INT、INTEGER | 4 | 有符號:[-21億多,21億多]或無符號:[0,42億多] |
BIGINT | 8 | 很大,19位數字的範圍 |
記住mysql的整數類型有5種,分別是tinyint、smallint、mediumint、int和bigint。
另外還有兩個特性:數據庫
浮點數類型 | 字節 | 範圍 |
---|---|---|
FLOAT | 4 | [1.175494351E-38,3.402823466E+38] |
DOUBLE | 8 | [2.2..E-308,1.7...E+308] |
定點數類型 | 字節 | 範圍 |
---|---|---|
DECIMAL(M,D) | M+2 | 最大取值範圍與DOUBLE相同,有效範圍由M,D決定 |
位類型 | 字節 | 範圍 |
---|---|---|
BIT(M) | 1-8 | 最小值BIT(1),最大值BIT(64) |
浮點數和定點數均可以用(M,D)的方式來進行表示。
(M,D)表示該值一共顯示M位數字(整數位+小數位),其中D位位於小數點後面。函數
MySQL中提供了多種對字符數據的存儲類型,不一樣版本可能有所差別,本文以5.0版本爲例。設計
字符串類型 | 描述 |
---|---|
CHAR(M) | M爲0-255之間的整數 |
VARCHAR(M) | M爲0-65535之間的整數 |
TINYBLOB | 容許0-255字節 |
BLOB | 容許0-65535字節 |
MEDIUBLOB | 容許0-167772150字節 |
LONGBLOB | 容許0-4294967295字節 |
TINYTEXT | 容許0-255字節 |
TEXT | 容許0-65535字節 |
MEDIUMTEXT | 容許0-167772150字節 |
LONGTEXT | 容許0-4294967295字節 |
VARBINARY(M) | 容許長度0-M個字節的邊長字節字符串 |
BINARY(M) | 容許0-M個字節的定長字節字符串 |
CHAR和VARCHAR很相似,都用來保存mysql中較短的字符串。兩者的主要區別在於存儲方式不一樣:code
好比存儲字符串「abc」,CHAR(5)佔用了5個字節,而VARCHAR(5)佔用3個字節。字符串
分類:table
日期時間類型 | 字節 | 範圍 |
---|---|---|
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有一個特色就是和時區相關。當插入日期時,會先轉換爲本地時區後存放;而從數據庫裏面取出時,也一樣須要將日期轉換爲本地時區後顯示。
查看當前時區的SQL:
show variables like 'time_zone';
class