MySQL系列(3): 基本数据类与类型选择

  MySQL 支持多种数据类型来存储数据,包括数值类型、字符串类型、时间和日期类型、JSON格式类型
  
  本篇是对 MySQL 5.7 版本官方手册 **[MySQL 5.7 Reference Manual . Chapter 11 Data Types]**章节的简单汇总,便于快速查看。

下面的表显示了需要的每个整数类型的存储和范围。

常用类型

数值类型

MySQL 支持所有标准 SQL 数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMALNUMERIC),以及近似数值数据类型(FLOAT、REALDOUBLE PRECISION)。

关键字 INTINTEGER 的同义词,关键字 DECDECIMAL 的同义词。

BIT 数据类型保存字段值,并且支持 MyISAM、MEMORY、InnoDB 和BDB 表。

作为 SQL 标准的扩展,MySQL 也支持整数类型TINYINT、MEDIUMINTBIGINT

MySQL 对小数的表示,两种方式:浮点数定点数,类型名后面跟(M,D)来表示,M精度,表示共有 M 位数字(整数位 + 小数位), D标度,表示小数位。

  1. 浮点数:包括float(单精度)double(双精度),在不指定精度标度时,会按实际的精度来显示(由实际的硬件和操作系统决定);在指定了精度标度时,若值范围超出,在保存时会进行四舍五入,系统不会报错。
  2. 定点数:只有decimal,在不指定精度标度时,则按默认的整数位为 10,小数位为 0 存储(10,0),若超越了精度标度,系统会报错。比浮点数精度高,适合用于表示货币等精度高的数据。

Numeric Types

日期和时间类型

表示时间值的日期和时间类型为 DATETIME、DATE、TIMESTAMP、TIMEYEAR

每个时间类型有一个有效值范围和一个 值,当指定了 MySQL 不能表示的值时会使用 值。

TIMESTAMP 类型与时区相关,保存时会转为 0 时区时间,取出时根据本地时区转为本地时间。

Date and Time Types

字符串类型

字符串类型是极其常用的数据类型,MySQL 为字符串类型提供了多个表示格式:CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUMSET
String Types

CHARVARCHAR 类型类似,但它们保存检索的方式不同。

  1. char 长度因定为创建字段时指定的长度,会删除末尾空格。
  2. varchar 是可变长字符串,占用空间为实际的字符长度,会保留末尾空格。

BINARYVARBINARY 类似于 CHARVARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节数值值

BLOB 是一个二进制大对象,可以容纳可变数量的数据。
4BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOBLONGBLOB。它们只是可容纳值的最大长度不同。

4TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXTLONGTEXT。这些对应 4 种 BLOB 类型,有相同的最大长度和存储需求。

类型选择

在选择存储数据类型时,需要充分考滤所占用的存储空间,应尽可能使用最精确的类型。

  1. 如果是字符或字符串类型的,尽可能使用最精确的长度。
  2. 如果是数值类型的,尽可能确定有符号无符号,如果不存在负数的情况,需指定为 UNSIGNED 以加大正数的取值范围。
    例如,整数列用取值范围在 1-99999 ,则 MEDIUMINT UNSIGNED 为最佳类型,满足需求并使用最少的存储量。
  3. 使用 DECIMAL类型的列,所有基本计算(**+,-,*和/**)都是以 65位十进制精度完成的。如果精度要求不太重要,或要求计算速度优先,可以考虑使用 DOBLE 类型。
  4. 还可以把精确小数类型转存储在BIGINT类型,这样可以利用 64 位计算得到精确的数值,使用时把结果转换为浮点数。

相关参考

  1. MYSQL中数据类型介绍
  2. MySQL 8.0 / Data Types

MySQL系列(3): 基本数据类与类型选择

http://blog.gxitsky.com/2019/01/14/MySQL-03-datatype/

作者

光星

发布于

2019-01-14

更新于

2023-03-06

许可协议

评论