MySQL中的数据类型

文章目录

  • [1 常见的数据类型](#1 常见的数据类型)
  • [2 整数类型](#2 整数类型)
    • [2.1 属性 M](#2.1 属性 M)
    • [2.2 属性 UNSIGNED](#2.2 属性 UNSIGNED)
    • [2.3 属性 ZEROFILL](#2.3 属性 ZEROFILL)
    • [2.4 整数类型的适用场景](#2.4 整数类型的适用场景)
  • [3 浮点类型](#3 浮点类型)
  • [4 定点类型](#4 定点类型)
  • [5 位类型](#5 位类型)
  • [6 日期与时间类型](#6 日期与时间类型)
    • [6.1 YEAR 类型](#6.1 YEAR 类型)
    • [6.2 DATE 类型](#6.2 DATE 类型)
    • [6.3 TIME 类型](#6.3 TIME 类型)
    • [6.4 DATETIME 类型](#6.4 DATETIME 类型)
    • [6.5 TIMESTAMP 类型](#6.5 TIMESTAMP 类型)

1 常见的数据类型

类型 类型分类
整数类型 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、BIGINT
浮点类型 FLOAT、DOUBLE
定点数类型 DECIMAL
位类型 BIT
日期时间类型 YEAR、TIME、DATE、DATETIME、TIMESTAMP
文本字符串类型 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
枚举类型 ENUM
集合类型 SET
二进制字符串类型 BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
JSON类型 JSON对象 JSON数组

2 整数类型

整数类型一共有 5 种:

包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT

整数类型 字节 有符号数取值范围 无符号数取值范围
TINYINT 1 -128 - 127 0-255
SMALLINT 2 -32768 - 32767 0-65535
MEDIUMINT 3 -8388608 - 8388607 0-16777215
INT 4 -2147483648 - 2147483647 0-4294967295
BIGINT 8 -9223372036854775808 - 9223372036854775808 0-18446744073709551615

2.1 属性 M

在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。M表示显示宽度,M的取值范围是(0, 255)

int(3)、int(4)、int(8) 在磁盘上都 是占用 4 bytes 的存储空间。

int(5):当数据宽度小于5位的时候在数字前面需要用 字符填满宽度。该项功能需要配合" ZEROFILL "使用,表示用"0"填满宽度,否则指定显示宽度无效

2.2 属性 UNSIGNED

无符号类型(非负),所有的整数类型都有一个可选的属性UNSIGNED(无符号属性),

无符号整数类型的最小取值为0。所以,如果需要在MySQL数据库中保存非负整数值时,可以将整数类型设 置为无符号类型。

int类型默认显示宽度为int(11),无符号int类型默认显示宽度为int(10)

2.3 属性 ZEROFILL

ZEROFILL即 0 填充,如果某列是ZEROFILL,那么MySQL会自动为当前列添加UNSIGNED属性,

如果指定了ZEROFILL只是表示不够M位时,用0在左边填充,

如果超过M位,只要不超过数据存储范围即可。

当使用ZEROFILL时,会自动添加UNSIGNED

2.4 整数类型的适用场景

整数类型 使用场景
TINYINT 一般用于枚举数据
SMALLINT 一般用于较小范围内的数据统计
MEDIUMINT 一般用于较大整数的计算
INT 一般使用的范围比较大,使用频率比较高
BIGINT 一般用于超大型数据的处理

3 浮点类型

类型 有符号数取值范围 无符号数取值范围 字节占用数
FLOAT ±3.4∗10^38 0 - +3.4∗10^38 4
DOUBLE ±1.7∗10^308 0 - +1.7∗10^308 8

对于浮点类型来说,单精度存储需要4个字节,双精度存储需要8个字节

  • FLOAT (M,D) 或者 DOUBLE(M,D),M称为精度,D称为标度
  • M = 整数位+小数位, D = 小数位
  • 取值范围 : 0<=M<=255 , 0<=D<=30
  • FLOAT和DOUBLE不指定(M,D)时,默认按照实际的精度来显示
  • 从MySQL 8.0.1开始,FLOAT(M,D),DOUBLE(M,D)的用法在官方文档中不推荐使用

4 定点类型

类型 字节 范围
DECIMAL M+2 有效范围由 M 和 D 决定
  • 使用 DECIMAL(M,D) 的方式表示高精度小数。其中,M被称为精度,D被称为标度。0<=M<=65, 0<=D<=30,D < M
  • DECIMAL(M,D)的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由M和D决定的。 DECIMAL 的存储空间并不是固定的,由精度值M决定,总共占用的存储空间为M+2个字节
  • 定点数在MySQL内部是以 字符串 的形式进行存储,这就决定了它一定是精准的
  • 当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0)。当数据的精度超出了定点数类型的 精度范围时,则MySQL同样会进行四舍五入处理

5 位类型

BIT类型中存储的是二进制值,类似010110

二进制字符串类型 长度 长度范围
BIT M 1<=M<=64
  • BIT类型,如果没有指定(M),默认是1位。这个1位,表示只能存1位的二进制值。这里(M)是表示二进制的位数,位数最小值为1,最大值为64

6 日期与时间类型

类型 名称 字节 日期格式 最大值 最小值
YEAR 1 YYYY或YY 1901 2155
TIME 时间 3 HH:MM:SS -838:59:59 838:59:59
DATE 日期 4 YYYY-MM-DD 1001-01-01 9999-12-31
DATETIME 日期时间 8 YYYY-MM-DD HH:MM:SS 1001-01-01 00:00:00 9999-12-31 23:59:00
TIMESTAMP 日期时间 4 YYYY或YY 1901 2155

6.1 YEAR 类型

YEAR 类型用来表示年份,在所有的日期时间类型中所占用的存储空间最小,只需要 1 个字节 的存储空间

在MySQL中,以4位字符串或者数字格式表示YEAR类型,其格式为YYYY,最小值为1901,最大值为2155

6.2 DATE 类型

6.3 TIME 类型

6.4 DATETIME 类型

6.5 TIMESTAMP 类型

相关推荐
dovens1 分钟前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
IOT.FIVE.NO.11 分钟前
claude code desktop cowork报错解决和记录Workspace..The isolated Linux environment ...
linux·服务器·数据库
Rick199310 分钟前
mysql 慢查询怎么快速定位
android·数据库·mysql
科技小花7 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56618 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全9 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_7717172110 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
绘梨衣54710 小时前
Docker+FastAPI+MySQL 项目部署报错汇总
mysql·docker·fastapi
小江的记录本10 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi10 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql