在本教程中,您將了解MySQL數(shù)據(jù)類(lèi)型以及如何在MySQL中設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)有效地使用它們。
數(shù)據(jù)庫(kù)表包含具有特定數(shù)據(jù)類(lèi)型(如數(shù)字或字符串)的多個(gè)列。 MySQL提供更多的數(shù)據(jù)類(lèi)型,而不僅僅是數(shù)字或字符串。 MySQL中的每種數(shù)據(jù)類(lèi)型都可以通過(guò)以下特征來(lái)確定:
| 數(shù)據(jù)類(lèi)型 | 指定值和范圍 |
|---|---|
char |
String(0~255) |
varchar |
String(0~255) |
tinytext |
String(0~255) |
text |
String(0~65536) |
blob |
String(0~65536) |
mediumtext |
String(0~16777215) |
mediumblob |
String(0~16777215) |
longblob |
String(0~4294967295) |
longtext |
String(0~4294967295) |
tinyint |
Integer(-128~127) |
smallint |
Integer(-32768~32767) |
mediumint |
Integer(-8388608~8388607) |
int |
Integer(-214847668~214847667) |
bigint |
Integer(-9223372036854775808~9223372036854775807) |
float |
decimal(精確到23位小數(shù)) |
double |
decimal(24~54位小數(shù)) |
decimal |
將double轉(zhuǎn)儲(chǔ)為字符串形式 |
date |
YYYY-MM-DD |
datetime |
YYYY-MM-DD HH:MM:SS |
timestamp |
YYYYMMDDHHMMSS |
time |
HH:MM:SS |
enum |
選項(xiàng)值之一 |
set |
選項(xiàng)值子集 |
boolean |
tinyint(1) |
在MySQL中,您可以找到所有SQL標(biāo)準(zhǔn)數(shù)字類(lèi)型,包括精確數(shù)字?jǐn)?shù)據(jù)類(lèi)型和近似數(shù)字?jǐn)?shù)據(jù)類(lèi)型,包括整數(shù),定點(diǎn)和浮點(diǎn)數(shù)。 此外,MySQL還具有用于存儲(chǔ)位值的BIT數(shù)據(jù)類(lèi)型。數(shù)字類(lèi)型可以是有符號(hào)或無(wú)符號(hào),但BIT類(lèi)型除外。
下表顯示了MySQL中數(shù)字類(lèi)型的總結(jié):
| 數(shù)字類(lèi)型 | 描述 |
|---|---|
| TINYINT | 一個(gè)很小的整數(shù) |
| SMALLINT | 一個(gè)小的整數(shù) |
| MEDIUMINT | 一個(gè)中等大小的整數(shù) |
| INT | 一個(gè)標(biāo)準(zhǔn)整數(shù) |
| BIGINT | 一個(gè)大整數(shù) |
| DECIMAL | 定點(diǎn)數(shù) |
FLOAT |
單精度浮點(diǎn)數(shù) |
DOUBLE |
雙精度浮點(diǎn)數(shù) |
| BIT | 一個(gè)字節(jié)字段 |
MySQL沒(méi)有內(nèi)置的 BOOLEAN 或 BOOL 數(shù)據(jù)類(lèi)型。所以要表示布爾值,MySQL使用最小的整數(shù)類(lèi)型,也就是TINYINT(1)。 換句話(huà)說(shuō),BOOLEAN和BOOL是TINYINT(1)的同義詞。
在MySQL中,字符串可以容納從純文本到二進(jìn)制數(shù)據(jù)(如圖像或文件)的任何內(nèi)容??梢酝ㄟ^(guò)使用LIKE運(yùn)算符,正則表達(dá)式和全文搜索,根據(jù)模式匹配來(lái)比較和搜索字符串。
下表顯示了MySQL中的字符串?dāng)?shù)據(jù)類(lèi)型:
| 字符串類(lèi)型 | 描述 |
|---|---|
| char | 固定長(zhǎng)度的非二進(jìn)制(字符)字符串 |
| varchar | 可變長(zhǎng)度的非二進(jìn)制字符串 |
BINARY |
一個(gè)固定長(zhǎng)度的二進(jìn)制字符串 |
VARBINARY |
一個(gè)可變長(zhǎng)度的二進(jìn)制字符串 |
TINYBLOB |
一個(gè)非常小的BLOB(二進(jìn)制大對(duì)象) |
BLOB |
一個(gè)小的BLOB(二進(jìn)制大對(duì)象) |
MEDIUMBLOB |
一個(gè)中等大小的BLOB(二進(jìn)制大對(duì)象) |
LONGBLOB |
一個(gè)大的BLOB(二進(jìn)制大對(duì)象) |
| TINYTEXT | 一個(gè)非常小的非二進(jìn)制字符串 |
| TEXT | 一個(gè)小的非二進(jìn)制字符串 |
| MEDIUMTEXT | 一個(gè)中等大小的非二進(jìn)制字符串 |
| LONGTEXT | 一個(gè)很大的非二進(jìn)制字符串 |
| ENUM | 枚舉; 每個(gè)列值可以被分配一個(gè)枚舉成員 |
SET |
集合; 每個(gè)列值可以分配零個(gè)或多個(gè)SET成員 |
MySQL提供日期和時(shí)間的類(lèi)型以及日期和時(shí)間的組合。 此外,MySQL還支持時(shí)間戳數(shù)據(jù)類(lèi)型,用于跟蹤表的一行中的更改。如果只想存儲(chǔ)沒(méi)有日期和月份的年份數(shù)據(jù),則可以使用YEAR數(shù)據(jù)類(lèi)型。
下表說(shuō)明了MySQL日期和時(shí)間數(shù)據(jù)類(lèi)型:
| 字符串類(lèi)型 | 描述 |
|---|---|
| DATE | YYYY-MM-DD格式的日期值 |
| TIME | hh:mm:ss格式的時(shí)間值 |
| DATETIME | YYYY-MM-DD hh:mm:ss格式的日期和時(shí)間值 |
| TIMESTAMP | YYYY-MM-DD hh:mm:ss格式的時(shí)間戳記值 |
YEAR |
YYYY或YY格式的年值 |
MySQL支持許多包含各種幾何和地理值的空間數(shù)據(jù)類(lèi)型,如下表所示:
| 字符串類(lèi)型 | 描述 |
|---|---|
| GEOMETRY | 任何類(lèi)型的空間值 |
| POINT | 一個(gè)點(diǎn)(一對(duì)X-Y坐標(biāo)) |
| LINESTRING | 曲線(xiàn)(一個(gè)或多個(gè)POINT值) |
| POLYGON | 多邊形 |
| GEOMETRYCOLLECTION | GEOMETRY值的集合 |
| MULTILINESTRING | LINESTRING值的集合 |
| MULTIPOINT | POINT值的集合 |
| MULTIPOLYGON | POLYGON值的集合 |
MySQL 5.7.8版本支持原生JSON數(shù)據(jù)類(lèi)型,可以更有效地存儲(chǔ)和管理JSON文檔。 本機(jī)JSON數(shù)據(jù)類(lèi)型提供JSON文檔的自動(dòng)驗(yàn)證和最佳存儲(chǔ)格式。
在本教程中,您學(xué)習(xí)了各種MySQL數(shù)據(jù)類(lèi)型,可幫助您確定在創(chuàng)建表時(shí)應(yīng)使用哪些數(shù)據(jù)類(lèi)型。