深入解析 MySQL 数据库:数据类型

在 MySQL 数据库中,数据类型(Data Types)用于定义表中每一列的性质,包括存储的数据形式及其操作。这些数据类型可以分为几大类:数值类型、日期和时间类型、字符串类型等。以下是对 MySQL 数据类型的深入解析。

  1. 整数类型 TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
  2. 浮点类型 FLOAT、DOUBLE
  3. 定点数类型 DECIMAL
  4. 位类型 BIT
  5. 日期时间类型 YEAR、TIME、DATE、DATETIME、TIMESTAMP
  6. 文本字符串类型 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
  7. 枚举类型 ENUM
  8. 集合类型 SET
  9. 二进制字符串类型 BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
  10. JSON类型 JSON对象、JSON数组
  11. 空间数据类型 单值类型:GEOMETRY、POINT、LINESTRING、POLYGON;
  12. 集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION

常见数据类型的属性,如下:

|--------------------|---------------|
| MySQL关键字 | 含义 |
| NULL | 数据列可包含NULL值 |
| NOT NULL | 数据列不允许包含NULL值 |
| DEFAULT | 默认值 |
| PRIMARY KEY | 主键 |
| AUTO_INCREMENT | 自动递增,适用于整数类型 |
| UNSIGNED | 无符号 |
| CHARACTER SET name | 指定一个字符集 |

一、数值类型

数值类型用于存储数字,包括整数和浮点数。

1. 整数类型
  • TINYINT: 小整数,范围从 -128 到 127(或 0 到 255,若定义 UNSIGNED)。
  • SMALLINT: 小型整数,范围从 -32,768 到 32,767(或 0 到 65,535,若定义 UNSIGNED)。
  • MEDIUMINT: 中型整数,范围从 -8,388,608 到 8,388,607(或 0 到 16,777,215,若定义 UNSIGNED)。
  • INT: 整数,范围从 -2,147,483,648 到 2,147,483,647(或 0 到 4,294,967,295,若定义 UNSIGNED)。
  • BIGINT: 大整数,范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(或 0 到 18,446,744,073,709,551,615,若定义 UNSIGNED)。
2. 浮点数类型
  • FLOAT: 单精度浮点数,范围约为 -3.402823466E+38 到 3.402823466E+38。
  • DOUBLE: 双精度浮点数,范围约为 -1.7976931348623157E+308 到 1.7976931348623157E+308。
  • DECIMAL(M, D) : 精确的数值类型,M 是总位数,D 是小数位数。例如,DECIMAL(10, 2) 可以存储总共 10 位数字,其中 2 位在小数点后。

二、字符串类型

字符串类型用于存储文本数据。

1. 定长字符串
  • CHAR(M): 定长字符串,字符数为 M。若实际存储的字符少于 M 则用空格填充。
2. 变长字符串
  • VARCHAR(M): 变长字符串,最大字符数为 M。存储实际字符数加 1 或 2 字节用于记录长度。
3. 文本类型
  • TINYTEXT: 最多 255 字节的文本。
  • TEXT: 最多 65,535 字节的文本。
  • MEDIUMTEXT: 最多 16,777,215 字节的文本。
  • LONGTEXT: 最多 4,294,967,295 字节的文本。
4. 二进制字符串
  • BINARY(M) : 定长二进制字符串,和 CHAR 类似。
  • VARBINARY(M) : 变长二进制字符串,类似于 VARCHAR
  • TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB: 分别是对应 255 字节、65,535 字节、16,777,215 字节和 4,294,967,295 字节的二进制大对象(BLOB)。

三、日期和时间类型

日期和时间类型用于存储日期和时间值。

  • DATE : 日期,格式为 YYYY-MM-DD,范围为 1000-01-019999-12-31
  • DATETIME : 日期和时间,格式为 YYYY-MM-DD HH:MM:SS,范围为 1000-01-01 00:00:009999-12-31 23:59:59
  • TIMESTAMP : 时间戳,格式为 YYYY-MM-DD HH:MM:SS,范围为 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC。
  • TIME : 时间,格式为 HH:MM:SS,范围为 '-838:59:59''838:59:59'
  • YEAR(M) : 年,范围为 19012155,或者使用 2 位数字表示。

四、其他数据类型

  • ENUM: 枚举类型,可以存储在预定义的字符串列表中。每个值都有一个对应的整数索引。

    CREATE TABLE example (
    color ENUM('red', 'green', 'blue')
    );

  • SET: 一个字符串对象,可以有 0 个或多个值,从预定义的字符串列表中选择,采用集合形式。

    CREATE TABLE example (
    permissions SET('read', 'write', 'execute')
    );

五、结论

理解数据类型是进行数据库设计和优化的重要基础。选择合适的数据类型可以提高存储效率和查询性能。在设计数据库时,需根据业务需求合理选择数据类型,以确保数据的完整性和准确性。

相关推荐
luckys.one2 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
jakeswang5 小时前
全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析
数据库·mysql
一成码农6 小时前
MySQL问题7
数据库·mysql
Kt&Rs7 小时前
MySQL复制技术的发展历程
数据库·mysql
手握风云-7 小时前
MySQL数据库精研之旅第十六期:深度拆解事务核心(上)
数据库·mysql
叫我龙翔9 小时前
【MySQL】从零开始了解数据库开发 --- 库的操作
数据库·mysql·数据库开发
pan30350747910 小时前
mysql 回表查询(二次查询,如何检查,如何规避)
数据库·mysql
Sally璐璐10 小时前
Go正则表达式实战指南
数据库·mysql·golang
一叶飘零_sweeeet11 小时前
从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
java·数据库·mysql·数据库架构·分库分表
苹果醋311 小时前
数据库索引设计:在 MongoDB 中创建高效索引的策略
java·运维·spring boot·mysql·nginx