转载声明:文章来源https://blog.csdn.net/qhy850716/article/details/140327065
一、数值类型
1、字节类型
unsigned加在字节类型后面。
数据类型本身就是一种约束。
当插入数据不在范围内时mysql不会进行插入。
2、位类型
bit(m) m默认是1,范围[1, 64]
查看bit类型时由于是二进制,所以要转化成十进制才能看到,即select hex(bit_name) form table_name
3、浮点数类型
a、float类型
float(m, d) 占用4个字节
m表示显示长度,d表示小数位数。
例如float(4,2) 范围就是 -99.99 ~ 99.99
注意
存值时四舍五入
定义成unsigned,负数部分直接舍去
当位数较多时会出现精度损失
b、double类型
与float类型相似,只是精度更高,占用8个字节
c、decimal类型
不会出现精度损失,并且精度更高。
decimal(m,d)
m最大65位,d最大30位,不设置默认10位
二、字符串类型
1、固定字符串 char类型
char(L) L最大长度255字符
在mysql中不论是字母,数字,汉字都看做一个个字符,类似于符号
2、变长字符串 varchar类型
carchar(L) L最大长度65535字节
但是varchar会取出1~3个字节来记录总长度,所以有效的最大字节数是65532
3、补充知识
(1)字节与字符
在utf8编码下,1字符 = 3字节
在gbk编码下,1字符 = 2字节
所以在utf8编码下,varchar(n),其中n的范围是[1,65532 / 3],即[1,21844]
所以在gbk编码下,varchar(n),其中n的范围是[1,65532 / 2],即[1,32766]
(2)对比不同
varchar与char不同,char是固定开L个字符大小,varchar是最多开L个字符,实际用多少给多少
注意varchar要开一个字节记录大小
char磁盘空间较浪费,但是效率高
varchar磁盘空间较节省,但是效率低
三、日期和时间类型
1、date类型 日期
格式:yyyy-mm-dd,占用3个字节
2、datetime类型 时间日期
格式:yyyy-mm-dd HH:ii:ss,占用8个字节
3、timestamp类型 时间戳
格式:yyyy-mm-dd HH:ii:ss,占用4个字节
在插入数据时,时间戳类型不要自己插入,他会在每一次更新数据时自动更新。
四、枚举类型(单选类型)
格式:enum('选项1','选项2','选项3'...);
最多65535个选项
五、集合类型(多选类型)
格式:set('选项值1','选项值2','选项值3'...)
最多64个选项值
六、枚举类型与集合类型的补充知识
1、enum插入数据时的数字含义
我们在插入数据时,不仅可以直接插入选项名称,也可插入数字,类似于c语言中的枚举类型,选项1,2,3...的下标就是从1,2,3...、
2、set插入数据时的数字含义
与enum的数字不同,set中的数字是代表位图,选择选项就是1,不选择就是0,组成的二进制再变成十进制就是set插入的数字含义。
例如在上图中我们有insert into votes values('赵六',1,7);这条sql语句,7的二进制位是111,所以从左向右有三个hobby选项被选择,最后显示时就发现赵六hobby有羽毛球,篮球,乒乓球。
3、enum查找
语句:select * from table_name where enum_name=...;
4、set查找
select * from table_name where set_name=set_name1; 表示在set中查找只有set_name1的选项
select * from table_name where find_in_set(sub,list); 表示在set中查找包含sub的选项
而且find_in_set函数可以用and连接达到查找多个选项,毕竟set是多选类型
帖子还没人回复快来抢沙发