MySQL数据类型详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 按照官方的文档(8.0)分析,MySQL的数据类型大概可以分为五类:数值数据类型、日期和时间数据类型、字符串数据类型、空间数据类型、JSON数据类型

按照官方的文档(8.0) 分析,MySQL的数据类型大概可以分为五类:数值数据类型、日期和时间数据类型、字符串数据类型、空间数据类型、JSON数据类型

1、数值数据类型

1.1、整数

MySQL支持SQL表中整数integer(int)和smallint。作为一个可扩展标准,MySQL也支持整数tinyintmediumintbigint

  • MySQL支持的整数存储空间和范围

    类型 存储空间(bytes) 有符号范围 无符号范围
    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 [-263, 263-1] [0, 264-1]

1.2、定点数

定点数 自变量的值范围可以表示为:DECIMAL(M,D)

  • m是最大位数(精度)。范围是1到65。默认值为10
  • d是小数点右边的位数(小数位数)。范围是0到30,并且不能大于m。默认值为0

    decimal的值使用二进制格式存储,该格式将9个十进制数字打包为4个字节。每个值的整数和小数部分的存储要求分别确定。九个数字的每个倍数需要4个字节,其余的剩余数字则需要4个字节的一部分。

    剩余数字 所需字节数
    0 0
    1–2 1
    3–4 2
    5–6 3
    7–9 4
  • decimal(65, 0)时,支持最大范围[-1065-1, 1065-1]

1.3、浮点数

浮点数有float(单精度)和double(双精度)

类型 精度值 所需字节字节
float 0~23 4
double 24~53 8

浮点数可以和定点数一样指定md,但是为了保证最大可能的可移植性,需要使用浮点数存储的代码应使用floatdouble precision,不规定精度或位数。

1.4、位类型

  • 位类型(bit),它是用来存放二进制数据的,bit(1)表示存储长度为1位的二进制数据。超出存储长度会被直接截取。取值范围[bit(1), bit(64)]

2、日期和时间数据类型

  • 日期和时间数据类型用于表示时间值datetimedatetimetimestampyear
  • timestamp自动设置为最新修改的日期和时间,定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,存放这条记录最后被修改的时间
  • 每个时间类型有一个有效值范围和一个"零"值。

    类型 字节数 取值范围 零值
    year 1 1901~2155 0000
    date 4 1000-01-01~9999-12-31 0000:00:00
    time 3 -838:59:59~838:59:59 00:00:00
    datetime 8 1000-01-01 00:00:00~9999-12-31 23:59:59 0000-00-00 00:00:00
    timestamp 4 1970-01-01 08:00:01~2038-01-19 11:14:07 00000000000000

3、字符串类型

  • 字符串数据类型charvarcharbinaryvarbinaryblobtextenumset

    类型 最大长度(bytes) 说明
    char 255 定长字符串
    varchar 65535 变长字符串
    binary 255 二进制定长字符串
    varbinary 65535 二进制变长字符串
    tinytext 255 短文本字符串
    text 65535 长文本数据
    mediumtext 224-1 中等长度文本数据
    longtext 232-1 极大文本数据
    tinyblob 255 二进制短文本字符串
    blob 65535 二进制长文本数据
    mediumblob 224-1 二进制中等长度文本数据
    longblob 232-1 二进制极大文本数据

3.1、char和varchar

  • char(n) 若存入字符数小于n,默认在后面补充空格,查询的时候再将空格去掉。所以char类型存储的字符串末尾不能有空格。
  • varchar的值是可变长度的字符串。长度可以指定为0到65535之间的值。有效最大长度 取决于最大行大小和所使用的字符集。
  • 官方示例:

    char(4) 需要存储 varchar(4) 需要存储
    '' '    ' 4字节 '' 1个字节
    'ab' 'ab  ' 4字节 'ab' 3个字节
    'abcd' 'abcd' 4字节 'abcd' 5字节
    'abcdefgh' 'abcd' 4字节 'abcd' 5字节
  • 显示在表最后一行中的值仅在不使用严格的SQL模式 时才适用,如果启用了严格模式,则会报错。

3.2、binary和varbinary

(binaryvarbinary)和(charvarchar)类似,不同的是它们存储二进制字节字符串而不是字符串。

  • binary(n) 若存入字符数小于n,默认在后面补充0x00,查询的时候再去掉。

3.3、text和blob

  • blob是一个二进制大对象,可以容纳可变数量的数据。tinyblobblobmediumbloblongblob这四个blob类型。仅在它们可以保存的值的最大长度上有所不同。
  • text的四个类型tinytexttextmediumtextlongtextblob的四种类型相对应。
  • blob值被视为二进制字符串(字节字符串)。它们具有binary字符集和排序规则,并且比较和排序基于列值中字节的数字值。
  • text值被视为非二进制字符串(字符字符串)。它们具有binary以外的字符集,并且根据字符集的排序规则对值进行排序和比较。

3.3、enum

enum是一个字符串对象,值是从允许输入的列表中选择的,这些值在表创建时在列规范中定义。

  • enum列表的最大数量为65535,每个值末尾的空格都会被删除。
  • enum列表有not null属性,其默认值为取值列表的第一个元素。
  • enum列表没有not null,则enum类型将允许插入null,并且null为默认值。
  • enum列表中的每个值独有一个顺序排列的编号,MySQL会存入这个编号而不是对应的值。

3.4、set

set是可以具有零个或多个值的字符串对象,这些值在表创建时在列规范中定义。

  • set的最大数量为64,每个值末尾的空格都会被删除。
  • 取多个元素时,不同元素用逗号隔开。
  • 大概可以理解为enum的多选版。

4、json数据类型

MySQL支持json定义的数据类型,该类型可有效访问json(JavaScript对象表示法)文档中的数据。

  • 自动验证存储在json列中的json文档。无效的文档会产生错误。
  • 查询性能的提升:查询不需要遍历所有字符串才能找到数据。
  • json存储的数据不能是null,只能是json格式的数据

5、空间数据类型

注:没有理解,拷贝部分官方的介绍。
空间数据类型有下面几种:

  • GEOMETRY: 是层次结构的根类。可以存储任何类型的几何值。其他单值类型(POINT, LINESTRING和POLYGON)将其值限制为特定的几何类型。
  • Point:(点)指的是代表坐标空间中单个位置的几何类。
  • Curve: (曲线)是一种1维几何对象,通常由一系列点表示。Curve的特殊子类定义了点之间的内插类型。Curve是一种非实例化类。
  • LineString: 是具有点之间线性内插特性的Curve
  • Surface: 是一种2维几何对象。它是一种非实例化类。其唯一的可实例化子类是Polygon。
  • Polygon: 是代表多边几何对象的平面Surface。它由单个外部边界以及0或多个内部边界定义,其中,每个内部边界定义为Polygon中的1个孔。
  • GeometryCollection: 是由1个或多个任意类几何对象构成的几何对象。
  • MultiPoint: 是一种由Point元素构成的几何对象集合。这些点未以任何方式连接或排序。
  • MultiCurve: 是一种由Curve元素构成的几何对象集合。MultiCurve是一种非实例化类。
  • MultiLineString: 是一种由LineString元素构成的几何对象集合。
  • MultiSurface: 是一种由Surface元素构成的几何对象集合。MultiSurface是一种非实例化类。其唯一的可实例化子类是MultiPolygon
  • MultiPolygon: 是一种由Polygon元素构成的几何对象集合。

本文链接:MySQL的数据类型

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
39 5
|
7月前
|
存储 关系型数据库 MySQL
MySQL数据类型详解及实例应用
MySQL数据类型详解及实例应用
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库的数据类型、语法和高级查询
MySQL数据库的数据类型、语法和高级查询
83 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL支持多种数据类型
MySQL支持多种数据类型
126 3
|
2月前
|
存储 关系型数据库 MySQL
什么是mysql的数据类型?
什么是mysql的数据类型?
50 2
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据类型
MySQL数据类型
56 2
|
7月前
|
SQL 存储 关系型数据库
RDS for MySQL的SQL分类与数据类型
小明需在MySQL中管理商品信息,使用SQL完成业务操作。SQL分为DQL(查询)、DML(增删改)、DDL(定义)、DCL(权限控制)和TCL(事务)五大类。DDL用于创建、修改和删除数据库结构,DML处理数据,DCL控制权限,TCL管理事务,DQL则用于查询数据。MySQL有多种数据类型,如数值型(整数、小数)、日期型和字符串型等,选择合适的数据类型是高效开发的关键。
78 0
|
4月前
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
37 2
|
4月前
|
存储 关系型数据库 MySQL
MySQL 中的 BLOB 数据类型深入解析
【8月更文挑战第31天】
562 0
|
4月前
|
存储 关系型数据库 MySQL
下一篇
DataWorks