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

五、结论

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

相关推荐
昨天今天明天好多天2 小时前
【Linux】MySQL部署
linux·mysql·adb
我还能再卷一点2 小时前
Linux安装mysql【超详细】
linux·mysql·adb
新知图书6 小时前
MySQL 9从入门到性能优化-创建触发器
数据库·mysql·性能优化
大只因bug6 小时前
基于Springboot的在线考试与学习交流平台的设计与实现
java·spring boot·后端·学习·mysql·vue·在线考试与学习交流平台系统
零希7 小时前
正则表达式
java·数据库·mysql
2301_795859447 小时前
Ubuntu下安装和配置MySQL5.7教程
mysql
任错错7 小时前
flinksql-Queries查询相关实战
大数据·数据库·mysql·flink·flinksql
Mephisto.java7 小时前
【力扣 | SQL题 | 每日4题】力扣2004, 1454,1613,1709
hive·sql·mysql·leetcode·oracle·database
lipviolet9 小时前
MySQL系列---sql优化
数据库·sql·mysql
free_girl_fang9 小时前
夯实根基之MySql从入门到精通(一)
java·数据结构·数据库·mysql