当前位置:网站首页>mysql数据类型
mysql数据类型
2022-07-21 12:55:00 【程序三两行】
一、类型概述
二、整数类型
整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT
1、整数类型的可选属性有三个
1.1、M
M表示显示宽度,取值范围是(0, 255)。例如,int(5):当数据宽度小于5位的时候在数字前面需要用 字符填满宽度。该项功能需要配合“ ZEROFILL ”使用,表示用“0”填满宽度,否则指定显示宽度无效。 如果设置了显示宽度,那么插入的数据宽度超过显示宽度限制,会不会截断或插入失败? 答案:不会对插入的数据有任何影响,还是按照类型的实际宽度进行保存,即 显示宽度与类型可以存储的 值范围无关 。从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性。 整型数据类型可以在定义表结构时指定所需要的显示宽度,如果不指定,则系统为每一种类型指定默认 的宽度值。 举例:
CREATE TABLE test_int1 ( x TINYINT, y SMALLINT, z MEDIUMINT, m INT, n BIGINT );
mysql> desc test_int1; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | x | tinyint(4) | YES | | NULL | | | y | smallint(6) | YES | | NULL | | | z | mediumint(9) | YES | | NULL | | | m | int(11) | YES | | NULL | | | n | bigint(20) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
查看表结构 (MySQL5.7中显式如下,MySQL8中不再显式范围)
TINYINT有符号数和无符号数的取值范围分别为-128~127和0~255,由于负号占了一个数字位,因此 TINYINT默认的显示宽度为4。同理,其他整数类型的默认显示宽度与其有符号数的最小值的宽度相同。 举例:
1.2、UNSIGNED
UNSIGNED : 无符号类型(非负),所有的整数类型都有一个可选的属性UNSIGNED(无符号属性),无 符号整数类型的最小取值为0。所以,如果需要在MySQL数据库中保存非负整数值时,可以将整数类型设 置为无符号类型。 int类型默认显示宽度为int(11),无符号int类型默认显示宽度为int(10)。
CREATE TABLE test_int3( f1 INT UNSIGNED ); mysql> desc test_int3; +-------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+-------+ | f1 | int(10) unsigned | YES | | NULL | | +-------+------------------+------+-----+---------+-------+ 1 row in set (0.00 sec)
1.3、ZEROFILL
ZEROFILL : 0填充,(如果某列是ZEROFILL,那么MySQL会自动为当前列添加UNSIGNED属性),如果指 定了ZEROFILL只是表示不够M位时,用0在左边填充,如果超过M位,只要不超过数据存储范围即可。 原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都 是占用 4 bytes 的存储空间。也就是说,int(M),必须和UNSIGNED ZEROFILL一起使用才有意义。如果整 数值超过M位,就按照实际位数存储。只是无须再用字符 0 进行填充。
2、适用场景
TINYINT :一般用于枚举数据,比如系统设定取值范围很小且固定的场景。
SMALLINT :可以用于较小范围的统计数据,比如统计工厂的固定资产库存数量等。
MEDIUMINT :用于较大整数的计算,比如车站每日的客流量等。
INT、INTEGER :取值范围足够大,一般情况下不用考虑超限问题,用得最多。比如商品编号。
BIGINT :只有当你处理特别巨大的整数时才会用到。比如双十一的交易量、大型门户网站点击量、证
券公司衍生产品持仓等。
3、如何选择
在评估用哪种整数类型的时候,你需要考虑 存储空间 和 可靠性 的平衡问题:一方 面,用占用字节数少 的整数类型可以节省存储空间;另一方面,要是为了节省存储空间, 使用的整数类型取值范围太小,一 旦遇到超出取值范围的情况,就可能引起 系统错误 ,影响可靠性。 举个例子,商品编号采用的数据类型是 INT。原因就在于,客户门店中流通的商品种类较多,而且,每 天都有旧商品下架,新商品上架,这样不断迭代,日积月累。 如果使用 SMALLINT 类型,虽然占用字节数比 INT 类型的整数少,但是却不能保证数据不会超出范围 65535。相反,使用 INT,就能确保有足够大的取值范围,不用担心数据超出范围影响可靠性的问题。 你要注意的是,在实际工作中,系统故障产生的成本远远超过增加几个字段存储空间所产生的成本。因 此,我建议你首先确保数据不会超过取值范围,在这个前提之下,再去考虑如何节省存储空间。
三、浮点型
四、日期与时间类型
MySQL有多种表示日期和时间的数据类型,不同的版本可能有所差异,MySQL8.0版本支持的日期和时间 类型主要有:YEAR类型、TIME类型、DATE类型、DATETIME类型和TIMESTAMP类型。
可以看到,不同数据类型表示的时间内容不同、取值范围不同,而且占用的字节数也不一样,你要根据 实际需要灵活选取。 为什么时间类型 TIME 的取值范围不是 -23:59:59~23:59:59 呢?原因是 MySQL 设计的 TIME 类型,不光表 示一天之内的时间,而且可以用来表示一个时间间隔,这个时间间隔可以超过 24 小时。
边栏推荐
- 年中盘点 | 2022年,PaaS 再升级
- Common operations of windows10 system
- Understand the volatile implementation of JVM from the bottom, CPU cache, cache consistency MESI, store bufferi, nvalidate queue and other knowledge
- window10系统常用操作
- 你离「TDengine 开发者大会」只差一条 SQL 语句!
- GeoTools学习参考文章
- Taishan Office Technology Lecture: how to set borders and backgrounds for pages
- [chestnut sugar GIS] how do individual users of Tencent conference change their names
- [BSP video tutorial] BSP video tutorial No. 20: play with serial port special topics, Hal library, ll library and register implementation methods, as well as learning several key sequence diagrams in
- 牛客刷题篇
猜你喜欢
Taishan Office Technology Lecture: how to set borders and backgrounds for pages
易烊千玺考编,被骂上热搜。。。
牛客刷题篇
OrmLiteDB数据库(依赖)的简单使用(小白成长记录)
马斯克上传大脑很疯狂,Neuralink却早已一地鸡毛
【板栗糖GIS】腾讯会议的个人用户如何改名
打假AI无主灯,欧瑞博、艾拉物联、绿米Aqara谁是玩真的?
泰山OFFICE技术讲座:如何给页面设置边框、背景
Mapstruct code generator realizes object transformation
苹果因键盘不好使赔3.4亿,SpaceX接单韦布后继者,META起诉Meta,今日更多新鲜事在此...
随机推荐
【板栗糖GIS】记录两个傻到不能再傻的记录——台式电脑无信号或者不亮屏
专访SPORTFIVE李莹:如何用Web3的方式推动体育IP拓展“新商业版图”
2022年最新湖北建筑安全员模拟题库及答案
Write bootloader from 0 - bootloader relocates app
DRF--users用户模块
打假AI无主灯,欧瑞博、艾拉物联、绿米Aqara谁是玩真的?
How to exit the current C application
Sdl2 concise tutorial (III): display pictures
联影医疗通过注册:拟募资125亿 薛敏控制32%股权
有点酷,使用 .NET MAUI 探索太空
Command line use of eslint
Cesium loads 3D tiles data
LeetCode-153-寻找旋转排序数组中的最小值
[chestnut sugar GIS] how do individual users of Tencent conference change their names
Mid year inventory | in 2022, PAAS will be upgraded again
【板栗糖GIS】arcmap—如何快速生成四至信息
马斯克上传大脑很疯狂,Neuralink却早已一地鸡毛
Alicloud ECS manually attaching disks
Simple use of ormlitedb database (dependent) (Xiaobai growth record)
PL-Marker(ACL 2022)——信息抽取(NER+RE)新SOTA,论文浅析与代码浏览