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

相关推荐
芷栀夏9 分钟前
基于Anything LLM的本地知识库系统远程访问实现路径
数据库·人工智能
RainbowSea12 分钟前
12 MySQL 数据库其它调优策略
java·sql·mysql
软件20527 分钟前
【redis使用场景——缓存——数据淘汰策略】
数据库·redis·缓存
ChinaRainbowSea39 分钟前
9-2 MySQL 分析查询语句:EXPLAIN(详细说明)
java·数据库·后端·sql·mysql
时序数据说41 分钟前
Java类加载机制及关于时序数据库IoTDB排查
java·大数据·数据库·物联网·时序数据库·iotdb
deeper_wind1 小时前
MySQL数据库基础(小白的“升级打怪”成长之路)
linux·数据库·mysql
加勒比海涛1 小时前
Spring Cloud Gateway 实战:从网关搭建到过滤器与跨域解决方案
数据库·redis·缓存
belldeep1 小时前
java:如何用 JDBC 连接 TDSQL 数据库
java·数据库·jdbc·tdsql
格调UI成品3 小时前
预警系统安全体系构建:数据加密、权限分级与误报过滤方案
大数据·运维·网络·数据库·安全·预警
心平愈三千疾7 小时前
通俗理解JVM细节-面试篇
java·jvm·数据库·面试