数据库中的数据类型

一、数值类型

1、字节类型

字节类型 大小表示范围unsigned表示范围
tinyint1字节-2 ^ 7 ~ 2 ^ 7 - 10 ~ 2 ^ 8 - 1
smallint2字节-2 ^ 15 ~ 2 ^ 15 - 10 ~ 2 ^ 16 - 1
mediumint3字节-2 ^ 23 ~ 2 ^ 23 - 10 ~ 2 ^ 24 - 1
int4字节-2 ^ 31 ~ 2 ^ 31 - 10 ~ 2 ^ 32 - 1
bigint8字节-2 ^ 63 ~ 2 ^ 63 - 10 ~ 2 ^ 64 - 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个字符,实际用多少给多少

存储char(4)varchar(4)char占用字节varchar占用大小字节
abcdabcdabcd3*4=123*4+1=13
aaa3*4=123*1+1=4

注意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是多选类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值