深入解析 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')
    );

五、结论

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

相关推荐
Rain的Java大神之路1 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
大海星辰7983 小时前
一次对账SQL“灵异事件”排查:NOT IN返回空集的坑
mysql
Linux-lucky3 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
&不羁之风&6 小时前
从 MySQL 到 MongoDB:80 万系统日志(sys_log)平滑迁移完整实战(含 Windows 环境 mongoimport 安装与避坑)
mysql·mongodb
这个DBA有点耶7 小时前
InnoDB页结构深入:页分裂、页合并、填充因子——B+树底层机制全解析
数据库·mysql·架构
山岚的运维笔记7 小时前
mysql 专业笔记 -- 第 36 章:MySQL 管理
运维·数据库·笔记·后端·mysql·oracle·dba
霸道流氓气质8 小时前
SQL 里的 AND / OR 优先级陷阱:一个括号引发的“数据越界“
mysql
爱奥尼欧11 小时前
【MySQL】建库就是建目录?字符集校验规则、备份恢复与alter改表实操
mysql
大虾别跑11 小时前
mysql5.7升级
mysql
geovindu12 小时前
sql: Transaction & Concurrency Patterns using mysql 9.0
mysql·数据库开发·数据库架构