[TOC]
MySQL中定義數據字段的類型對你數據庫的優化是非常重要的。
MySQL支持多種類型,大致可以分為三類:數值、日期/時間和字符串(字符)類型。
## 數值類型
MySQL支持所有標準SQL數值數據類型。
<table class="reference">
<tbody>
<tr>
<th width="10%">
<strong>
類型
</strong>
</th>
<th width="15%">
<strong>
大小
</strong>
</th>
<th width="30%">
<strong>
范圍(有符號)
</strong>
</th>
<th width="30%">
<strong>
范圍(無符號)
</strong>
</th>
<th width="15%">
<strong>
用途
</strong>
</th>
</tr>
<tr>
<td>
TINYINT
</td>
<td>
1 字節
</td>
<td>
(-128,127)
</td>
<td>
(0,255)
</td>
<td>
小整數值
</td>
</tr>
<tr>
<td>
SMALLINT
</td>
<td>
2 字節
</td>
<td>
(-32 768,32 767)
</td>
<td>
(0,65 535)
</td>
<td>
大整數值
</td>
</tr>
<tr>
<td>
MEDIUMINT
</td>
<td>
3 字節
</td>
<td>
(-8 388 608,8 388 607)
</td>
<td>
(0,16 777 215)
</td>
<td>
大整數值
</td>
</tr>
<tr>
<td>
INT或INTEGER
</td>
<td>
4 字節
</td>
<td>
(-2 147 483 648,2 147 483 647)
</td>
<td>
(0,4 294 967 295)
</td>
<td>
大整數值
</td>
</tr>
<tr>
<td>
BIGINT
</td>
<td>
8 字節
</td>
<td>
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
</td>
<td>
(0,18 446 744 073 709 551 615)
</td>
<td>
極大整數值
</td>
</tr>
<tr>
<td>
FLOAT
</td>
<td>
4 字節
</td>
<td>
(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823
466 351 E+38)
</td>
<td>
0,(1.175 494 351 E-38,3.402 823 466 E+38)
</td>
<td>
單精度
<br>
浮點數值
</td>
</tr>
<tr>
<td>
DOUBLE
</td>
<td>
8 字節
</td>
<td>
(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225
073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
</td>
<td>
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
</td>
<td>
雙精度
<br>
浮點數值
</td>
</tr>
<tr>
<td>
DECIMAL
</td>
<td>
對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2
</td>
<td>
依賴于M和D的值
</td>
<td>
依賴于M和D的值
</td>
<td>
小數值
</td>
</tr>
</tbody>
</table>
## 日期和時間類型
表示時間值的日期和時間類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每個時間類型有一個有效值范圍和一個"零"值,當指定不合法的MySQL不能表示的值時使用"零"值。
<table class="reference">
<tbody>
<tr>
<th width="10%">
類型
</th>
<th width="10%">
大小
<br>
(字節)
</th>
<th width="40%">
范圍
</th>
<th>
格式
</th>
<th>
用途
</th>
</tr>
<tr>
<td width="10%">
DATE
</td>
<td width="10%">
3
</td>
<td width="40%">
1000-01-01/9999-12-31
</td>
<td>
YYYY-MM-DD
</td>
<td>
日期值
</td>
</tr>
<tr>
<td width="10%">
TIME
</td>
<td width="10%">
3
</td>
<td width="40%">
'-838:59:59'/'838:59:59'
</td>
<td>
HH:MM:SS
</td>
<td>
時間值或持續時間
</td>
</tr>
<tr>
<td width="10%">
YEAR
</td>
<td width="10%">
1
</td>
<td width="40%">
1901/2155
</td>
<td>
YYYY
</td>
<td>
年份值
</td>
</tr>
<tr>
<td width="10%">
DATETIME
</td>
<td width="10%">
8
</td>
<td width="40%">
1000-01-01 00:00:00/9999-12-31 23:59:59
</td>
<td>
YYYY-MM-DD HH:MM:SS
</td>
<td>
混合日期和時間值
</td>
</tr>
<tr>
<td width="10%">
TIMESTAMP
</td>
<td width="10%">
4
</td>
<td width="40%">
1970-01-01 00:00:00/2037 年某時
</td>
<td>
YYYYMMDD HHMMSS
</td>
<td>
混合日期和時間值,時間戳
</td>
</tr>
</tbody>
</table>
## 字符串類型
字符串類型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET
<table class="reference">
<tbody>
<tr>
<th width="20%">
類型
</th>
<th width="25%">
大小
</th>
<th width="55%">
用途
</th>
</tr>
<tr>
<td>
CHAR
</td>
<td>
0-255字節
</td>
<td>
定長字符串
</td>
</tr>
<tr>
<td>
VARCHAR
</td>
<td>
0-65535 字節
</td>
<td>
變長字符串
</td>
</tr>
<tr>
<td>
TINYBLOB
</td>
<td>
0-255字節
</td>
<td>
不超過 255 個字符的二進制字符串
</td>
</tr>
<tr>
<td>
TINYTEXT
</td>
<td>
0-255字節
</td>
<td>
短文本字符串
</td>
</tr>
<tr>
<td>
BLOB
</td>
<td>
0-65 535字節
</td>
<td>
二進制形式的長文本數據
</td>
</tr>
<tr>
<td>
TEXT
</td>
<td>
0-65 535字節
</td>
<td>
長文本數據
</td>
</tr>
<tr>
<td>
MEDIUMBLOB
</td>
<td>
0-16 777 215字節
</td>
<td>
二進制形式的中等長度文本數據
</td>
</tr>
<tr>
<td>
MEDIUMTEXT
</td>
<td>
0-16 777 215字節
</td>
<td>
中等長度文本數據
</td>
</tr>
<tr>
<td>
LONGBLOB
</td>
<td>
0-4 294 967 295字節
</td>
<td>
二進制形式的極大文本數據
</td>
</tr>
<tr>
<td>
LONGTEXT
</td>
<td>
0-4 294 967 295字節
</td>
<td>
極大文本數據
</td>
</tr>
</tbody>
</table>
## CHAR和VARCHAR
### CHAR
用于定長字符串,并且必須在圓括號內用一個大小修飾符來定義。這個大小修飾符的范圍仍0-255。比指定長度大的值將被截短,而比指定長度小的值將會用空格作填補
### VARCHAR
它是一種可變長度的字符串類型,并且也必須帶有一個范圍在0-65535之間的指示器。CHAR 和 VARCHGAR 不同之處在于 MySQL 數據庫處理這個指示器的方式:CHAR 把這個大小視為值的大小,在長度不足的情況下就用空格補足。而 VARCHAR 類型把它視為最大值并且只使用存儲字符串實際需要的長度來存儲值。所以短于指示器長 度的 VARCHAR 類型不會被空格填補,但長于指示器的值仍然會被截短。
## ENUM
ENUM 類型因為只允許在集合中取得一個值,有點類似于單選項。在處理相互排拆的數據時容易讓人理解,比如人類的性別。最大可以有 65535 個成員值
~~~
enum('男','女','保密')
~~~
## SET
SET 類型和 ENUM 類型相似但不相同。SET類型可以從預定義的集合中取得任意數量的值。一個 SET 類型最多可以包含 64 項元素。
~~~
set('游戲','看書','打籃球')
~~~
常用的數據類型
<table>
<tbody>
<tr>
<th>字段</th>
<th>類型</th>
</tr>
<tr>
<td>姓名</td>
<td>char(20)</td>
</tr>
<tr>
<td>價格</td>
<td>DECIMAL(7, 3)</td>
</tr>
<tr>
<td>文章類型</td>
<td>TEXT</td>
</tr>
<tr>
<td>手機</td>
<td>char(11)</td>
</tr>
<tr>
<td>時間戳</td>
<td>int(10)</td>
</tr>
</tbody>
</table>
- 序言
- 第一章:準備工作
- 寫在學習之前的話
- web應用開發結構
- 開發工具/環境
- 第二章:展現層面(HTML/CSS)
- HTML簡介
- HTML基礎
- HTML編碼
- HTML鏈接
- HTML圖像
- HTML列表
- HTML表單
- HTML表格(分水嶺)
- HTML 實體
- HTML框架
- CSS層疊樣式表
- CSS選擇器
- CSS文本/字體
- CSS繼承和疊加
- CSS框模型
- CSS浮動(分水嶺)
- CSS定位
- CSS背景
- CSS圖標字體
- CSS補充
- 開發技巧
- 第三章:展現層面(Javascript)
- JS簡介
- JS實現
- JS輸出交互
- JS變量
- JS數據類型
- JS運算符
- JS流程控制(分水嶺)
- JS函數
- JS數組
- JS對象(分水嶺)
- JS數組對象
- JS字符串對象
- JS數學對象
- JS日期對象
- JS BOM對象(分水嶺)
- JS DOM對象
- JS事件對象
- JS元素對象
- JS DOM節點
- 第四章:展現層面(Jquery)
- JQ簡介
- JQ使用
- JQ選擇器
- JQ篩選
- JQ屬性
- JQ-CSS
- JQ事件
- JQ文檔處理
- JQ效果
- JQ-ajax
- 第五章:邏輯/業務層面(PHP)
- PHP簡介
- PHP變量
- PHP數據類型
- PHP常量
- PHP運算符
- PHP流程控制
- PHP函數(分水嶺)
- PHP日期
- PHP數學
- PHP數組
- PHP字符串
- PHP正則表達式(分水嶺)
- PHP目錄操作
- PHP文件
- PHP上傳/下載
- PHP面向對象(分水嶺)
- PHP圖像處理
- PHP會話控制
- Ajax異步處理
- PHPMysql擴展
- PHPMysqli擴展
- PHPPdo擴展
- PHP接口
- PHP命名空間
- 第六章:邏輯/業務層面(框架設計)
- 第七章:存儲層面(mysql)
- Mysql基礎
- Mysql Sql簡介
- Mysql數據庫
- Mysql數據類型
- Mysql數據表
- Mysql操作記錄
- Mysql查詢
- Mysql修改表結構
- Mysql日期與時間
- Mysql分組統計
- Mysql多表查詢
- Mysql安全
- Mysql存儲引擎
- Mysql事務
- Mysql視圖
- Mysql觸發器
- Mysql存儲過程
- Mysql存儲函數
- Mysql優化
- 第八章:服務器(Linux)
- Linux介紹與安裝
- Shell
- 目錄與文件操作
- VIM編輯器使用
- 帳號管理
- SUDO
- 權限控制
- 壓縮與打包
- 軟件安裝
- 計劃任務
- 進程管理
- 寶塔Linux面板