> 選擇合適的數據類型很重要
> 定義 類型的時候盡量選擇not null
> 對于可以枚舉的數據, 可以用整形替代
> varchar和char, 一個變長一個定長, 當然對于md5等之后的字符串肯定使用char
> 要用selcet \*, 那么字段中少用text, 數據庫中text類型只是存儲text的文件指針, 并不是存儲的數據
> int類型可以存儲32bit/4byte的數據, 不會因為int(10) 和int(20)區別而改變
# 整形
## TINYINT
占用1個字節
| 數據類型 | 范圍 |
| ----- | ------------- |
| int8 | 有符號位:-128~127 |
| uint8 | 無符號位: 0~255 |
## SAMLLINT
占用2個字節
| 數據類型 | 范圍 |
| ------ | ------------------ |
| int16 | 有符號位:-32768~+32767 |
| uint16 | 無符號位: 0~65535 |
## MEDIUINT
占用3個字節
| 數據類型 | 范圍 |
| ------ | --------------------------- |
| int24 | 有符號位:-8388608~+8388607 |
| uint24 | 無符號位: 0~16777215 / 2^24 - 1 |
## INT
占用4個字節
| 數據類型 | 范圍 |
| ------ | ------------------- |
| int32 | 有符號位:-2^31~2^31 - 1 |
| uint32 | 無符號位: 0~2^32 - 1 |
* `int(10)`和 `int(100)`沒有區別
## BIGINT
占用8個字節
| 數據類型 | 范圍 |
| ------ | ------------------- |
| int64 | 有符號位:-2^63~2^63 - 1 |
| uint64 | 無符號位: 0~2^64 - 1 |
# 浮點數
## 單精度浮點FLOAT
精確到小數點的7位
-3.40283466E+38~-1.17549351E-38
1.17549351E-38~3.40283466E+38
## 雙精度浮點DOUBLE
大概是單精度的10倍
## DECIMAL
一般都是用decimal
DECIMAL(M,D)
M為有效位數
D為保留幾位小數
# 日期時間型
根據實際情況選用整形或者時間戳類型
## DATATIME
8個字節
1000年1月1日0點-9999年12月31日59時59分59秒
# 字符型
## CHAR(M)
定長
M個字節, 0<= M <= 255,
## VARCHAR(M)
變長
L+1個字節, 其中 L<=M 并且 0<=M<=65535
## TINYTEXT
L+1個字節
L< 2^8
## TEXT
L+2個字節
L< 2^16
## MEDIUMTEXT
L+3個字節
L< 2^24
## LONGTEXT
L+4個字節
L< 2^32
## ENUM
1或2個字節
取決于枚舉值的個數(最多65535個值)
可用 tinyint, int 等整形代替