MySQL数据类型详解

网友投稿 690 2022-05-30

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

1、数值数据类型

1.1、整数

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

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

1.2、定点数

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

m是最大位数(精度)。范围是1到65。默认值为10

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

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

当decimal(65, 0)时,支持最大范围[-1065-1, 1065-1]

1.3、浮点数

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

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

1.4、位类型

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

2、日期和时间数据类型

日期和时间数据类型用于表示时间值date、time、datetime、timestamp和year。

timestamp自动设置为最新修改的日期和时间,定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,存放这条记录最后被修改的时间

每个时间类型有一个有效值范围和一个"零"值。

3、字符串类型

字符串数据类型char、varchar、binary、varbinary、blob、text、enum和set。

3.1、char和varchar

char(n)若存入字符数小于n,默认在后面补充空格,查询的时候再将空格去掉。所以char类型存储的字符串末尾不能有空格。

varchar的值是可变长度的字符串。长度可以指定为0到65535之间的值。有效最大长度 取决于最大行大小和所使用的字符集。

官方示例:

MySQL数据类型详解

显示在表最后一行中的值仅在不使用严格的SQL模式 时才适用,如果启用了严格模式,则会报错。

3.2、binary和varbinary

(binary、varbinary)和(char、varchar)类似,不同的是它们存储二进制字节字符串而不是字符串。

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

3.3、text和blob

blob是一个二进制大对象,可以容纳可变数量的数据。tinyblob、blob、mediumblob和longblob这四个blob类型。仅在它们可以保存的值的最大长度上有所不同。

text的四个类型tinytext、text、mediumtext和longtext和blob的四种类型相对应。

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 数据结构

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实战篇:手把手教你DBCA搭建Oracle ADG丨【绽放吧!数据库】
下一篇:企业级应用系统和微信集成的系列教程之六:如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中
相关文章