> 选择合适的数据类型很重要
> 定义 类型的时候尽量选择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 等整形代替