数值类型
|-----------------------|--------|-------|---|---|---|---|
| 类型 | 说明 | 范围/特点 | | | | |
| **TINYINT** | 小整数 | -128 ~ 127(有符号),0 ~ 255(无符号) |||||
| **SMALLINT** | 较小整数 | -32768 ~ 32767 || | | |
| **MEDIUMINT** | 中等整数 | -8388608 ~ 8388607 ||| | |
| **INT / INTEGER** | 标准整数 | -2147483648 ~ 2147483647 ||| | |
| **BIGINT** | 大整数 | -9223372036854775808 ~ 9223372036854775807 |||||
| **FLOAT** | 单精度浮点数 | 约 7 位有效数字 || | | |
| **DOUBLE** | 双精度浮点数 | 约 15 位有效数字 || | | |
| **DECIMAL(M,D)** | 定点数 | 精确小数,M 总位数,D 小数位 |||| |
tinyint

在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。
可以通过UNSIGNED来说明某个字段是无符号的

BIT类型
bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

MySQL中BIT类型默认以二进制存储,查询时会用十六进制形式显示,0x02就代表十进制的2。
小数类型
float
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节。

如果超出(4,2)范围,可能不能插入,也有的按照四舍五入的显示数据,不指明类型就是有符号
如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99
无符号不能插入负数;
decimal
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数。
decimal(5,2) 表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的范围 0 ~ 999.99
decimal和float很像,但是有区别: float和decimal表示的精度不一样。

float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。
如果d被省略,默认为0.如果m被省略, 默认是10。
建议:如果希望小数的精度高,推荐使用decimal。
字符串类型
|--------------------|---------|--------|---|---|
| 类型 | 说明 | 最大长度 | | |
| **CHAR(M)** | 定长字符串 | 255 字符 | | |
| **VARCHAR(M)** | 变长字符串 | 65535 字节(受行大小限制) |||
| **TINYTEXT** | 小文本 | 255 字节 | | |
| **TEXT** | 普通文本 | 65535 字节 || |
| **MEDIUMTEXT** | 中等文本 | 16MB | | |
| **LONGTEXT** | 长文本 | 4GB | | |
| **TINYBLOB** | 小二进制数据 | 255 字节 | | |
| **BLOB** | 普通二进制数据 | 65535 字节 || |
| **MEDIUMBLOB** | 中等二进制数据 | 16MB | | |
| **LONGBLOB** | 长二进制数据 | 4GB | | |
| **ENUM** | 枚举 | 最多 65535 个值 || |
| **SET** | 集合 | 最多 64 个成员 || |
char和varchar

char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255
关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字 节数是65532。
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占 用3个字节],
如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符 占用2字节)。
日期和时间类型
|-------------------|------|-------------------------|----|---|---|---|---|---|
| 类型 | 说明 | 格式 | 范围 | | | | | |
| **DATE** | 日期 | `YYYY-MM-DD` | '1000-01-01' ~ '9999-12-31' ||| | | |
| **TIME** | 时间 | `HH:MM:SS` | '-838:59:59' ~ '838:59:59' ||| | | |
| **DATETIME** | 日期时间 | `YYYY-MM-DD HH:MM:SS` | '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' ||||| |
| **TIMESTAMP** | 时间戳 | `YYYY-MM-DD HH:MM:SS` | '1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC ||||||
| **YEAR** | 年份 | `YYYY` | 1901 ~ 2155 || | | | |

enum和set
enum 枚举 单选类型
enum(选项1,选项2,选项3)
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考 虑,这些值实际存储的是"数字",因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535 个;当我们添加枚举值时,也可以添加对应的数字编号.
set 集合 多选类型
set('选项值1','选项值2','选项值3', ...)
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率 考虑,这些值实际存储的是"数字",因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。

集合查询使用find_ in_ set函数:
find_in_set(sub,str_list) :如果 str_list 用逗号分隔的字符串。
sub 在 str_list 中,则返回下标;如果不在,返回0;
