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 类型

相关推荐
NineData2 小时前
NineData 迁移评估功能正式上线
数据库·dba
NineData7 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师9 小时前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
全栈老石13 小时前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
倔强的石头_1 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou643 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北3 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12024 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba