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

五、结论

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

相关推荐
廿一夏6 小时前
MySql存储引擎与索引
数据库·sql·mysql
敲个大西瓜8 小时前
Java项目常用数据归档方式
mysql
kyriewen11 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
小码工作室11 小时前
使用 HAVING 进行 MySQL 集合筛选
mysql
罗超驿11 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
小江的记录本12 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
木心术112 小时前
Windows系统下MySQL与AI工具集成方案:数据存储与调用实践
人工智能·windows·mysql
这个DBA有点耶12 小时前
SQL改写实战:子查询、CTE、窗口函数性能对比
数据库·mysql·性能优化
小江的记录本13 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
Java成神之路-13 小时前
深入拆解 MySQL InnoDB 隔离级别:从 MVCC 到临键锁
mysql