【MySQL】数据类型

数据类型分类

数据类型一般分为数值类型和字符串类型。 

数值类型

这里详解一些常用的数值类型

类型字节最小值最大值
tinyint1-128127
tinyint unsigned10255
small int -3276832767
small int unsigned2065535
medium int3-83886088388607
medium int unsigned3016777215
int4-21474836482147483647
int unsigned404294967295
bigint8-92233720368547758089223372036854775807
bigint unsigned8018446744073709551615

1. tinyint 类型

上面操作我们可以看到,创建了一个名为 number 的表,有一列 num 是 tinyint 类型,插入数据 1 的时候,成功插入,插入 128 的时候,这时提示我们越界出错了。因为 tinyint 类型的最大值为 127。

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

 其他的整型类型列如 int ,small int 等,用法和上面一样。

2. bit 类型 

用法

bit(M)

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

上面操作我们可以看到,定义了一个 8 位的 bit 类型的字段,我们插入了一个值为 10 的数据,但是显示出来的内容却很奇怪,其实  bit 类型的字段在显示时,是按照 ASCII 码对应的值显示的。

我们插入 65 的时候,可以看到,显示出来的就是大写字母 'A' 。

3. 小数类型

float 类型

float(m, d) [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

例如:float(4,2) 表示的范围是 -99.99 ~ 99.99 ,MySQL 在保存值时会进行四舍五入。

 对于无符号 float ,列如:float(4,2) unsigned 表示的范围是 0 ~ 99.99 ,MySQL 在保存值时会进行四舍五入。

decimal 类型 

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

decimal 类型的用法和 float 一样,区别是两个类型的精度不一样。

我们发现插入同样的数值时,两个类型显示的数据不一样,decimal 的精确度更高一点。
float 精确度大约是 7 位。decimal 整数最大位数 m 为 65。支持小数最大位数 d 是 30。如果 d 被省略,默认为 0。如果 m 被省略,默认是 10。 

字符串类型

1. char 类型

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

可以看到,我们定义一个列 类型为 char 长度为 2,可以插入 2个字符,超过这个长度就不行了。char 类型 最大长度是 255。 

2. varchar 类型

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

注意我们这里说的 L 的值是指长度,而不是字节,那么因为最大字节数为 65535 那么长度是多少呢?
1. varchar 字节数虽然为 65535,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
2. 当我们的表的编码是 utf8 时,varchar(n) 的参数 n 最大值是 65532/3=21844 因为 utf8 中,一个字符占用 3 个字节。
3. 如果编码是 gbk,varchar(n) 的参数 n 最大是 65532/2=32766 因为 gbk 中,一个字符占用 2 字节。

我们可以看到上面的操作证明了 varchar 类型的最大长度。 

 3. char 和 varchar 比较

1. 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号。
2. 如果数据长度有变化,就使用变长 (varchar) , 比如:名字,地址,但是你要保证最长的能存的进去。
3. 定长的磁盘空间比较浪费,但是效率高。
4. 变长的磁盘空间比较节省,但是效率低。

4. 日期和时间类型

常用的日期和事件类型有三个

datetime:时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从1000到9999,占用八字节。
date:日期 'yyyy-mm-dd',占用三字节。
timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字节。

添加数据时,事件戳会自动补上,当然显示的是你系统的时间,不一定就是准确的时间。

5. enum 和 set 类型

enum 枚举,单选类型。
enum('选项1','选项2','选项3',...);

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。

set 集合,多选类型。
set('选项值1','选项值2','选项值3', ...);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。

第1-8个成员,占一个字节;第9-16个成员,占两个字节;第17-24个字节,占三个字节;第25-32个成员,占四个字节;第33-64个成员,占8个字节。

在存储的时候,从第一个成员开始,分别对应的二进制为:0001,0010,0100,1000,10000......
假如我们在使用 set 类型时指定一个数值 3,那么就是 0011,也就是 1 和 2 的集合。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值