mysql数据类型的梳理

简介

想写本篇博客,是因为发现了mysql的数据类型非常的多。但是,其中的差异,为什么要用这样的数据类型,大多数人是没有去仔细了解的。所以,自己对这方面有点好奇,去学习了一下。笔记如下:

mysql常见数据类型
数值类型
  1. int:int最大长度是11位。从 -2^31 (-2,147,483,648) ^^到 2^31 - 1 (2,147,483,647)^ 的整型数据(所有数字)。存储大小为bai 4 个字节。11也是int类型的最大长度,其中第一位表示符号+或者-,后面十位表示数字。 所以,如果指定了长度,该字段其实也是长度为11的字段,因为只要是int类型,系统都分配了长度11位。那么指定哪个长度的意义其实是:显示位数。就是你存储的结果本质是11位,只不过可视化看起来不是而已。
  2. bigint:存储大小为 8 个字节。
  3. mediumint:存储大小为 3 个字节。
  4. smallint:存储大小为 2 个字节。
  5. tinyint:存储大小为 1 个字节。
  6. decimal: 是小数,在建表的时候可以指定存入的小数格式,如:decimal(p,d),就是整数保留p位,小数保留小数点后d位。注意:
  • P是表示有效数字数的精度。 P范围为1〜65。
  • D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于(<=)P。
  1. set:建表的时候设定好了set值,而后存储的时候,只能存储固定的几个set值中的一个。类似java中的枚举了。用法的话:你可以通过1,2,4,8,16这样的“下标”来指定,你需要存入的数据。话不多说,直接看例子:
-- 首先建表
create table set_table(
    id int auto_increment primary key,
    hobby set('music','movie','swimming','footbal')
);
-- 然后执行插入
insert into set_table(id,hobby) values(null,1);   -- 相当于插入了“music”
insert into set_table(id,hobby) values(null,2);  -- 相当于插入了“movie”
insert into set_table(id,hobby) values(null,3);  -- 相当于插入了“music,movie”
insert into set_table(id,hobby) values(null,4);  -- 相当于插入了“swimming”
insert into set_table(id,hobby) values(null,8);  -- 相当于插入了“footbal”

-- 由上面可以看出,我们建表的时候,新建的set,4个数据('music','movie','swimming','footbal')对应的下标是:(1,2,4,8)来着。当你插入数据为3的时候,会插入1+2,既:“music,movie”
-- 这样子,我们插入的数据是特定的,并且可以方便的插入多个字符组合成的一个字符串到指定字段中。
-- 然后是查询
SELECT * FROM set_table WHERE FIND_IN_SET('movie',hobby)>0;  -- 这样是利用了sql函数FIND_IN_SET(),可以找出指定的set字段hobby内,包含了movie的行。
SELECT * FROM set_table WHERE hobby & 4;  -- 这样是把hobby 内,存储了下标为4的值的行都筛选出来。
SELECT * FROM set_table WHERE hobby LIKE '%m%';  -- 这个就是把hobby 字段里面的值当做了字符串,倒是没有啥好说的。
SELECT * FROM set_table WHERE hobby = 'music,movie'; -- 这个就是把hobby 字段里面的值当做了字符串,倒是没有啥好说的。

  1. enum:枚举类型,在设定表的时候,指定字段的枚举值。然后插入的时候,就可以用1,2,3,4等下标来表示要插入的值了,在查询的时候也是如此,参考上面的set。很类似:
-- 首先建表
create table set_table(
    id int auto_increment primary key,
    emuns enum('北京','上海','广州','深圳')
);
-- 然后执行插入
insert into set_table(id,enums) values(null,1);   -- 相当于插入了“北京”
insert into set_table(id,enums) values(null,2);  -- 相当于插入了“上海”
insert into set_table(id,enums) values(null,3);  -- 相当于插入了“广州”
insert into set_table(id,enums) values(null,4);  -- 相当于插入了“深圳”
insert into set_table(id,enums) values(null,5);  -- 报错

-- 由上面可以看出,我们建表的时候,新建的enum,4个数据('北京','上海','广州','深圳')对应的下标是:(1,2,3,4)来着。当你插入数据为3的时候,会插入‘广州’
-- 然后是查询
SELECT * FROM set_table WHERE enums=2; -- 查询出下标为2的数据,上海。 

在这里插入图片描述
9. 浮点:float和double

字符类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

  1. char:普通字符串存储,用它就好了。注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
  2. varchar:变长字符串,和char的区别在于,字符如果很短,他占用的空间会缩短,而不是char那种,后面有空格也不理的定长字符串。充分利用磁盘空间
  3. blob:存储的是二进制的字节串,而不是字符了,可以容纳可变数量的数据,有tiny,small,medium和long几个级别。
  4. text:存储的是长文本,和char类似了,也有tiny,small,medium和long在这里插入图片描述
    ll,medium和long几个级别
时间类型
  1. DATETIME:数据格式为2020-11-05
  2. DATE: 数据格式为2020-11-05
  3. TIMESTAMP: 为一个数字:12392373485.是和1970年到现在的毫秒数。
  4. TIME:数据格式为000:00:00
  5. YEAR:数据格式为0223,
    在这里插入图片描述
空间数据类型

这个的话,是mysql为了地理啊,数学啊,之类的数据提供支持而设定的,主要包括:

  1. Point
    字段类型: point
    样例: Point(1 1)
  2. MultiPoint
    字段类型: multipoint
    样例: MULTIPOINT (1 1,2 2,3 3)
  3. LineString
    字段类型: linestring
    样例: LINESTRING(1 1,2 2,3 3)
  4. MultiLineString
    字段类型: multilinestring
    样例: MULTILINESTRING ((1 1,2 2,3 3),(2 2,2 3,2 4))
  5. Polygon
    字段类型: polygon
    样例:
    单面 POLYGON((1 1,1 2,2 2,2 1,1 1))
  6. MultiPolygon
    字段类型: multipolygon
    样例: MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((2 2,2 3,3 2,2 2)))
    里面是多个polygon
    这些数据可视化后是这个样子的:
    在这里插入图片描述
    在这里插入图片描述

参考:
7. Mysql之空间几何对象数据
8. MYSQL空间几何对象
9. mysql数据库 geometry, point, polygon类型,地理空间数据库查询操作

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值