前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《MySQL入门很轻松》第4章:数据表中能存放的数据类型

《MySQL入门很轻松》第4章:数据表中能存放的数据类型

原创
作者头像
炒香菇的书呆子
发布2022-02-14 23:06:02
2K0
发布2022-02-14 23:06:02
举报
文章被收录于专栏:乌龟哥哥默认学习专栏

MySQL支持多种数据类型,大致可以分为三类,分别是数值类型、日期和时间类型、字符串(字符)类型。

1.1 数值类型

MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER,

SMALLINT、TINYINT、MEDIUMINT 和 BIGINT),近似数值数据类型(FLOAT、REAL和DOUBLE),以及定点数类型(DECIMAL)。

注意:关键字INT是INTEGER的同义词,关键字DEC是 DECIMAL 的同义词.

MySQL 提供多种整数类型,不同的数据类型提供的取值范围不同,可以存储的值的范围越大,其所需要的存储空间也就越大,因此要根据实际需求选择适合的数据类型。

下图显示了每个整数类型的存储需求和取值范围。

类型名称

说明

存储需求字节

有符号数取值范围

无符号数取值范围

TINYINT

很小的整数

1

128~127

0~255

SMALLINT

小的整数

2

32768~32767

0~65535

MEDIUMINT

中等大小的整数

3

-8388608~8388607

0~16777215

INT (INTEGER)

普通大小的整数

4

-2147483648~2147483647

0~4294967295

BIGINT

大整数

8

9223372036854775808~9223372036854775807

0~18446744073709551615

MSQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如 INT(4))。INT(M)中的M指示最大显示宽度,最大有效显示宽度是4,需要注意的是,显示宽度与存储大小或类型包含的值的范围无关。

1.2浮点数类型

现实生活中很多情况需要存储带有小数部分的数值,这就需要浮点数类型,如 FLOAT和DOUBLE。其中,FLOAT 为单精度浮点数类型;DOUBLE为双精度浮点数类型。浮点数类型可以用(M,D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。下表显示了每个浮点数类型的存储需求和取值范围。

类型名称

存储需求/字节

有符号的取值范围

无符号的取值范围

FLOAT

4

-3.402823466E+38~-1.175494351E-38

0和1.175494351E-38~3.402823466E+38

DOUBLE

8

-1.7976931348623157E+308~ -2.2250738585072014E-308

0和2.2250738585072014E-308~ 1.7976931348623157E+308

注意:M和D在 FLOAT和 DOUBLE中是可选的,FLOAT 和 DOUBLE类型将被保存为硬件所支持的最大精度。

1.3 定点数类型

MySQL 中,除使用浮点数类型表示小数外,还可以使用定点数表示小数,定点数类型只有一种:DECIMAL。定点数类型也可以用(M,D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。DECIMAL 的默认D值为0,M值为10。下表显示了定点数类型的存储需求和取值范围。

DECIMAL类型不同干FLOAT和DECIMAL, DECIMAL实际是以字符串存储的.DECIMAL的有效取值范围由M和D的值决定。如果改变M而固定D,则其取值范围将随M的变大而变

1.4 日期和时间类型

MySQL 中,表示时间值的日期和时间类型为DATETIME、DATA、TIMESTAMP,TIME和YEAR。例如,只需记录年份信息时,可以只用YEAR类型。每种类型都有合法的取值范围。

类型名称

日期格式

日期范围

存储需求/字节

YEAR

YYYY

1901~2155

1

TIME

HH:MM:SS

-838:59:59-838:59:59

3

DATE

YYYY-MM-DD

1000-01-019999-12-31

3

DATETIME

YYYY-MM-DD HH:MM:SS

1000-01-01 00:00:009999-12-3123:59:59

8

TIMESTAMP

YYYY-MM-DD HH:MM:SS

1970-01-01 00:00:001~2038-01-19 03:14:07

4

1.5 字符串类型

字符串类型用于存储字符串数据,MySQL 支持两类字符串数据:文本字符串和二进制字符串。文本字符串可以进行区分或不区分大小写的串比较,也可以进行模式匹配查找。MySQL中字符串类型指的是CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT,ENUM 和 SET。下表列出了MySQL 中的字符串数据类型。

类型名称

说明

存储需求

CHAR M)

固定长度非二进制字符串

M字节,1<=M<=255

VARCHAR(M)

变长非二进制字符串

L+1字节,在此L<=M和1<=M<=255

TINYTEXT

非常小的非二进制字符串

L+1字节,在此L<28

TEXT

小的非二进制字符串

L+2字节,在此L<216

MEDIUMTEXT

中等大小的非二进制字符串

L+3字节,在此L<224

LONGTEXT

大的非二进制字符串

L+4字节,在此L<232

ENUM

枚举类型,只能有一个枚举字符串值

1或2字节,取决于枚举值的数目(最大值65535)

SET

一个集合,字符串对象可以有零个或多个SET成员

1,2,3,4,或8字节,取决于集合成员的数量(最多64个成员)

1.6 数据类型选择

MySQL 提供了大量的数据类型,为了优化存储,提高数据库性能,在任何情况下均应使用最精确的类型,即在所有可以表示该列值的类型中,该类型使用的存储最少

  1. 整数和浮点数 如果不需要小数部分,则使用整数来保存数据;如果需要表示小数部分,则使用浮点数类型。对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。例如,如果列的值的范围为1~99999,若使用整数,则 MEDIUMINT UNSIGNED是最好的类型;若需要存储小数,则使用FLOAT类型。 浮点数类型包括FLOAT和 DOUBLE类型。DOUBLE类型精度比FLOAT类型高,因此,如要求存储精度较高时,应选择DOUBLE 类型。
  2. 浮点数和定点数 浮点数FLOAT和 DOUBLE相对于定点数DECIMAL的优势是:在长度一定的情况下,浮点数能表示更大的数据范围。但是由于浮点数容易产生误差,因此对精确度要求比较高时,建议使用DECIMAL 来存储。DECIMAL在 MySQL中是以字符串存储的,用于定义货币等对精确度要求较高的数据。在数据迁移中,FLOAT(M,D)是非标准SQL定义,数据库迁移可能会出现问题,最好不要这样使用。另外,两个浮点数进行减法和比较运算时也容易出问题,因此在进行计算的时候,一定要小心。如果进行数值比较,最好使用DECIMAL类型。
  3. 日期和时间类型 MySQL对于不同种类的日期和时间有很多的数据类型,比如 YEAR和 TIME,如果只需要记录年份,则使用YEAR类型即可;如果只记录时间,只需使用TIME类型。如果同时需要记录日期和时间,则可以使用 TIMESTAMP 或者DATETIME 类型。由于TIMESTAMP列的取值范围小于DATETIME 的取值范围,因此存储范围较大的日期最好使用DATETIME。TIMESTAMP也有一个DATETIME 不具备的属性。默认的情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL 会把 TIMESTAMP列设为当前的时间。因此当需要在插入记录的同时插入当前时间时,使用 TIMESTAMP是方便的,另外 TIMESTAMP在空间上比 DATETIME 更有效。
  4. CHAR 与VARCHAR 之间的特点与选择CHAR和 VARCHAR的区别如下: (1)CHAR是固定长度字符,VARCHAR是可变长度字符; (2)CHAR会自动删除插入数据的尾部空格,VARCHAR不会删除尾部空格; (3)CHAR是固定长度,所以它的处理速度比 VARCHAR 的速度要快,但是它的缺点就是浪费存储空间。所以对存储不大,但在速度上有要求的可以使用CHAR类型; 反之,可以使用VARCHAR类型来实现

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 数值类型
  • 1.2浮点数类型
  • 1.3 定点数类型
  • 1.4 日期和时间类型
  • 1.5 字符串类型
  • 1.6 数据类型选择
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档