> 文章列表 > MySQL-数据类型

MySQL-数据类型

MySQL-数据类型

MYSQL数据类型

  • 1 整数类型
  • 2 浮点数类型和定点数类型
  • 3 日期与时间类型
  • 4 文本字符串类型
  • 5 二进制字符串类型
  • 6 数据类型的选择

表是由多列字段组成,每一个字段会有不同的数据类型,不同的数据类型决定了字段包含的数据内容。不同的数据类型也决定了mysql在使用他们的时候的方式。

1 整数类型

数据型数据类型主要用来存储数字,不同的数据类型提供不同的取值范围,可以存储的值的范围越大,所需要的存储空间也会越大。
MySQL-数据类型
1. TINYINT:

用于存储范围在 -128 到 127 之间的整数。如果使用 UNSIGNED 关键字,则范围变为 0 到 255,存储需求为1字节

2. SMALLINT:

用于存储范围在 -32,768 到 32,767 之间的整数。如果使用 UNSIGNED 关键字,则范围变为 0 到 65,535,存储需求为2字节。

3. MEDIUMINT:

用于存储范围在 -8,388,608 到 8,388,607 之间的整数。如果使用 UNSIGNED 关键字,则范围变为 0 到 16,777,215,存储需求为3字节。

4. INT 或 INTEGER:

用于存储范围在 -2,147,483,648 到 2,147,483,647 之间的整数。如果使用 UNSIGNED 关键字,则范围变为 0 到 4,294,967,295,存储需求为4字节。

5. BIGINT:

用于存储范围在 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 之间的整数。如果使用 UNSIGNED 关键字,则范围变为 0 到 18,446,744,073,709,551,615,存储需求为8字节。

2 浮点数类型和定点数类型

MySQL支持两种用于存储小数的数据类型,即浮点数类型和定点数类型。
MySQL-数据类型

1. 浮点数类型

包括FLOAT和DOUBLE,这两种类型都可以存储较大或较小的值,因为它们使用科学记数法表示数值。

FLOAT和DOUBLE的区别在于精度和存储空间大小。FLOAT类型精度为单精度,即4个字节,而DOUBLE类型精度为双精度,即8个字节。

FLOAT和DOUBLE类型的取值范围如下:

FLOAT类型的取值范围为-3.4028235E+38到3.4028235E+38,精度为单精度(4字节)。
DOUBLE类型的取值范围为-1.7976931348623157E+308到1.7976931348623157E+308,精度为双精度(8字节)。

  1. 定点数类型

定点数只有一种类型 DECIMAL。不同于FLOAT和DOUBLE,DECIMAL 实际上是以串的方式存放的,可能取值的范围和DOUBLE类型一样,但是有效的取值范围由精度和标度来确定。
它的存储空间是由精度值来决定的,占用 精度+2 字节。

例如,DECIMAL(8,2)可以存储-999999.99到999999.99之间的值,因为它使用8个数字位,其中2个数字是小数点后的位数。

FLOAT和DOUBLE在不指定精度的前提下,默认会按照实际的精度,DECIMAL如不指定精度,默认为(10,0)。

3 日期与时间类型

MySQL支持多种日期和时间类型,包括日期类型、时间类型、日期时间类型和时间戳类型。
MySQL-数据类型

  1. 日期类型:YEAR

单字节类型,用于表示年,在存储时只需要1字节,可以使用各种格式指定YEAR值。
1)4位字符或者4位数字格式表示的year,范围在 1901~2155,输入格式为’YYYY’或者 YYYY。
2)2位字符串表示的year,范围在00~99,其中00 ~ 69 和70 ~ 99的范围分别会被转换为2000 ~ 2069 和 1970 ~ 1999 的范围。
0 和 00 的范围相同,插入超过取值范围的值会被转换为 2000.
3)2位数字表示的year,范围在1 ~ 99. 1~ 69 和 70 ~ 99 会被转换为2001 ~ 2069 和 1970 ~ 1999 的范围。
注意,在这里 0 值将会装换为 0000 而不是 2000。

  1. 时间类型:TIME

time类型用在只需要时间信息的值,存储室后需要3字节,格式为’HH:MM:SS’ 从前至后分别表示小时,分钟,秒三个时间单位。取值范围为 -838:59:59 ~ 838:59:59,范围如此大的原因在于,不仅仅可以用于表示一天的时间,和可以用于表示过去的时间或者两个时间的时间间隔(可以为负数)。

1)‘D HH:MM:SS’ 格式的字符串,可以使用如下任何一种非严格的语法,‘HH:MM:SS’ ,‘HH:MM’ ,‘D HH:MM’ ,‘D HH’ ,‘SS’。 D在这里可以表示日,取值为0 ~ 34之间的值,插入数据库时,转换为小时保存,格式为 D*24 + HH。
2)‘HHMMSS’ 格式,没有间隔的字符串或者数值,有意义的数值,如 101012 则变为 10:10:12,不合法数据 959897,任意部分取值范围不合法,存储室变为 00:00:00.

  1. 日期时间类型:DATE

用在仅需日期值时,没有时间部分,存储需要 3 字节。日期格式为 ‘YYYY-MM-DD’。从前至后分别表示年,月,日三个时间单位。可使用字符或者数字类型进行数据插入,只要符合日期格式即可。
1)以’YYYY-MM-DD’ 或者’YYYYMMDD’ 的字符串表示的日期为 1000-01-01 ~ 9999-12-3 。 ‘2012-12-11’ 或者 ‘20121211’ 均为 2012-12-11.
2)以’YY-MM-DD’ 或者’YYMMDD’ 的字符串或者数据值表示的日期,YY表示的范围,参考 YEAR数据类型的范围。
3)使用current_date() 或者 NOW() ,插入当前系统日期。

  1. 日期时间类型:DATETIME

表示同时包含日期和时间信息的值,存储室需要8字节。‘YYYY-MM-DD HH:MM:SS’ 从前至后分别表示年,月,日 小时,分钟,秒。可使用字符或者数字类型进行数据插入,只要符合日期格式即可。
1)‘YYYY-MM-DD HH:MM:SS’ 或者 ‘YYYYMMDDHHMMSS’ 字符串格式表示的值,取值范围为 1000-01-01 00:00:00~ 9999-12-3 23:59:59。
2)‘YY-MM-DD HH:MM:SS’ 或者 ‘YYMMDDHHMMSS’ 字符串格式表示的日期,YY表示的范围,参考 YEAR数据类型的范围。
3) ‘YYYYMMDDHHMMSS’ 或者’YYMMDDHHMMSS’ 表示的日期和时间,在合理取值单位内,进行日期插入,如20230421131512 为 2023-04-21 13:15:12 , 980512234511 为 1998-01-12 23:45:11。

  1. 日期时间类型:TIMESTAMP

该类型显示的格式和DATETIME 相同,显示宽度固定在19个字节,日期格式为’YYYY-MM-DD HH:MM:SS’ ,取值范围小于 datatime,范围为 1970:-01-01 00:00:01 ~ 2038-01-19 03:14:07 UTC,UTC为世界标准时间,因此插入数据要在合法的取值范围内。

4 文本字符串类型

字符串类型用来存储字符串数据,可以存储字符串数之外,还可以存储其他数据,如图片和声音等,mysql中文本字符串指定的是CHAR,VARCHAR,TEXT,ENUM,SET。
MySQL-数据类型

  1. CHAR 和 VARCHAR

CHAR(M) 为固定长度字符串,定义时指定长度,保存是在右侧填充空格,已达到执行的字符长度,M为列长度,范围是0 ~ 255 个字符。
VARCHAR(M) 是长度可变的字符串,M表示最大列长度,范围是0 ~ 65535。VARCHAR的实际长度是由最长的行的大小和使用的字符集来决定的,实际占用的空间为字符串的实际长度+1。

  1. TEXT

TEXT列保存非二进制字符串,保存或者查询TEXT列的值的时候,不删除尾部空格。类型分为4种,
TINYTEXT:最多存储 2^8 - 1(即255)个字符,占用空间为 1 个字节。
TEXT:最多存储 2^16 - 1(即65,535)个字符,占用空间为 2 个字节。
MEDIUMTEXT:最多存储 2^24 - 1(即16,777,215)个字符,占用空间为 3 个字节。
LONGTEXT:最多存储 2^32 - 1(即4,294,967,295)个字符,占用空间为 4 个字节。

  1. ENUM

存储枚举值的数据类型,用于存储固定的、有限的可能值集合。在创建表时指定ENUM类型的列时,需要用到ENUM关键字,并且需要指定该列允许的枚举值。

ENUM类型的语法格式为:

ENUM('value1', 'value2', 'value3', ...)

其中,value1、value2、value3等就是该ENUM类型所能存储的枚举值,每个枚举值用单引号括起来,用逗号隔开。

  1. SET类型
    一种存储多个选项的数据类型,用于存储一组固定的、有限的可能选项集合。在创建表时指定SET类型的列时,需要用到SET关键字,并且需要指定该列允许的选项集合。

SET类型的语法格式为:

SET('option1', 'option2', 'option3', ...)

其中,option1、option2、option3等就是该SET类型所能存储的选项,每个选项用单引号括起来,用逗号隔开。

5 二进制字符串类型

二进制字符串类型是MySQL中一种存储二进制数据的数据类型,用于存储一些可能存在二进制数据的数据,如图片、音频、视频等。
MySQL-数据类型

  1. BIT

BIT类型是MySQL中一种存储位数据(二进制位)的数据类型。BIT类型可以存储零个或多个位,其长度由列声明中指定的位数决定。BIT类型可以存储布尔值或者位数据的组合,如二进制数或者旗帜(flag)等。

在MySQL中,BIT类型的长度可以是1到64位,如果不指定长度,MySQL会默认为1。与其他类型不同的是,在顺序排列中,BIT类型中的位是从右到左被编号的,也就是从低位到高位。在创建表时可以使用BIT类型。

  1. BINARY 和 VARBINARY

BINARY和VARBINARY都是MySQL中用来存储二进制数据的数据类型。

BINARY类型是一种固定长度的数据类型,它指定了一个固定的长度作为该列所能存储的二进制数据长度,如果插入的数据长度超过了指定的长度则会被截断。因为它是固定长度的,所以BINARY类型会占用比VARBINARY更多的存储空间。

VARBINARY类型是一种可变长度的二进制数据类型,它可以存储任意长度的二进制数据。因为它是可变的,所以VARBINARY类型只会占用实际数据长度的存储空间。

需要注意的是,虽然BINARY类型和VARBINARY类型都可以存储二进制数据,但它们的使用场景不太相同。BINARY类型适用于固定长度的二进制数据,例如存储MD5值等固定长度的字符串或哈希值;VARBINARY类型适用于可变长度的二进制数据,例如存储文件、视频、图片等任意长度的二进制数据。

  1. BLOB

BLOB是MySQL中一种二进制大型对象数据类型,用于存储大型二进制数据,例如图像、音频、视频等文件。BLOB类型可以存储零个或多个字节数,而且没有数据类型的最大长度。

在MySQL中,有4种类型的BLOB:

TINYBLOB:最大长度为255字节。
BLOB:最大长度为65,535字节。
MEDIUMBLOB:最大长度为16,777,215字节。
LONGBLOB:最大长度为4,294,967,295字节。

6 数据类型的选择

数据类型的选择要根据实际的需求来确定。以下是一些常见的数据类型和使用场景:

INT: 适用于创建表中的ID列、自然数列和计数器列,可以存储范围从-2147483648到2147483647的整数。

BIGINT: 适用于存储大整数,可以存储范围从-9223372036854775808到9223372036854775807的整数。
FLOAT: 适用于存储较小的浮点数,可以存储6个小数位的浮点数。

DOUBLE: 适用于存储更复杂的浮点数,可以存储15个小数位的浮点数。

DECIMAL: 适用于存储精确的小数,可以存储定点数,支持可变的小数位。

VARCHAR: 适用于存储可变长度的字符,可以存储最大65535个字符。

TEXT: 适用于存储不可预知长度的字符,可以存储最大65535个字符。

ENUM: 适用于存储预定的一组值,可以根据需要创建和使用。

DATE: 适用于存储日期,存储范围从1000-01-01到9999-12-31。

TIME: 适用于存储时间,可以存储小时、分钟、秒和毫秒。

在选择数据类型时,需要考虑存储的数据类型和大小,还要考虑查询的效率和可扩展性。因此,如果数据类型不确定,请在设计表时选择较小的数据类型,并在需要时扩展它们。另外,数据类型的选择也要考虑要支持的字符集和排序规则,以及数据的一致性和完整性,并遵循最佳实践。