MySQL数据类型详解:类型全览
mysql中支持的数据类型

首页 2025-07-05 23:12:30



MySQL中支持的数据类型详解 在数据库设计中,数据类型是不可或缺的基础元素,它们定义了表中可以存储的数据种类和范围

    MySQL作为一种广泛使用的关系型数据库管理系统,支持多种数据类型,以满足不同场景下的数据存储需求

    本文将详细介绍MySQL中支持的主要数据类型,包括数值类型、日期和时间类型、字符串类型、二进制数据类型以及其他特殊类型,旨在帮助读者更好地理解和应用这些数据类型

     一、数值类型 数值类型用于存储数字,可分为整数类型和浮点类型

     1. 整数类型 整数类型是数据库中最基本的数据类型,MySQL支持多种整数类型,以满足不同范围的整数存储需求

    这些类型包括TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT

    它们的主要区别在于存储大小和数值范围

    例如,TINYINT类型占用1个字节,其有符号范围从-128到127,无符号范围从0到255

    随着类型名称的递进,这些类型能够存储的整数范围逐渐增大

    INT类型占用4个字节,其有符号范围从-2,147,483,648到2,147,483,647,无符号范围从0到4,294,967,295

    BIGINT类型则占用8个字节,能够存储的整数范围更大

     MySQL还支持在整数类型后面指定显示宽度(如INT(5)),但这并不影响存储范围,仅用于格式化输出

    此外,整数类型还可以搭配使用UNSIGNED和ZEROFILL参数

    UNSIGNED参数表示无符号数,其数值范围更大

    ZEROFILL参数表示当数值位数不足显示宽度时,用0来填补空位

     2. 浮点类型 浮点类型用于存储带小数点的数值,如价格、薪资等

    MySQL支持FLOAT和DOUBLE两种浮点类型

    FLOAT类型占用4个字节,精度约为7位小数;DOUBLE类型占用8个字节,精度约为15位小数

    由于浮点数在计算机中的表示方式,可能会存在精度问题

    因此,在需要高精度计算的场景中,如财务应用,应谨慎使用浮点类型

     3. 定点类型 DECIMAL(或NUMERIC)类型用于存储精确的数值,特别是在需要高精度计算的财务应用中

    与FLOAT和DOUBLE不同,DECIMAL类型可以定义小数点前后的精确位数

    例如,DECIMAL(10,2)表示总共10位数字,其中小数部分占2位

    DECIMAL类型的存储空间是根据其精度决定的,字节数是M+2(M为总位数)

    因此,DECIMAL类型在存储高精度数值时比浮点类型更安全可靠

     二、日期和时间类型 日期和时间类型用于在数据库中存储日期和时间值

    MySQL支持DATE、TIME、DATETIME、TIMESTAMP和YEAR等日期和时间类型

     1. DATE类型 DATE类型用于存储日期值,格式为YYYY-MM-DD

    其范围从1000-01-01到9999-12-31

    在插入日期值时,可以使用4位字符串或数字表示年份;如果年份是2位数字,MySQL会根据规则进行转换

    例如,00~69转换为2000~2069,70~99转换为1970~1999

     2. TIME类型 TIME类型用于存储时间值(或时间间隔),格式为HH:MM:SS

    其范围从-838:59:59到838:59:59,支持负数表示时间间隔

    在插入时间值时,可以使用D HH:MM:SS格式的字符串或HHMMSS格式的数值表示

    其中D表示天数,取值范围是0-34;保存时小时的值等于(D24+HH)

     3. DATETIME类型 DATETIME类型用于存储日期和时间值,格式为YYYY-MM-DD HH:MM:SS

    其范围从1000-01-01 00:00:00到9999-12-31 23:59:59

    DATETIME类型可以直接用DATE类型和TIME类型组合而成

    在插入日期和时间值时,可以使用YYYY-MM-DD HH:MM:SS格式的字符串或相应的数字表示

     4. TIMESTAMP类型 TIMESTAMP类型与DATETIME类型类似,但范围更小(1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 UTC)

    此外,TIMESTAMP类型会自动转换为服务器时区,并支持自动更新特性(如ON UPDATE CURRENT_TIMESTAMP)

    这使得TIMESTAMP类型在需要记录数据修改时间的场景中非常有用

     5. YEAR类型 YEAR类型用于存储年份值,格式为YYYY或YY

    其范围从1901到2155

    在插入年份值时,可以使用4位或2位数字表示年份;如果年份是2位数字,MySQL会根据规则进行转换

    与DATE和TIME类型不同,YEAR类型占用1个字节的存储空间

     三、字符串类型 字符串类型用于在数据库中存储文本数据

    MySQL支持CHAR、VARCHAR、TEXT、ENUM、SET等多种字符串类型

     1. CHAR和VARCHAR类型 CHAR和VARCHAR类型都是在创建表时指定了最大长度

    CHAR类型是固定长度字符串,在创建表时就指定了长度(1 ≤ N ≤ 255),并占用指定长度的存储空间

    即使实际存储的字符串长度小于指定长度,CHAR类型也会使用空格填充剩余部分

    在检索时,CHAR类型会去除尾部空格

    VARCHAR类型是可变长度字符串,在创建表时指定了最大长度(1 ≤ N ≤ 65535),并根据实际存储的字符串长度动态调整存储空间

    这使得VARCHAR类型在存储长度可变的数据时更加节省空间

    但需要注意的是,VARCHAR类型的检索效率可能略低于CHAR类型

     2. TEXT类型 TEXT类型用于存储大文本数据,包括TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT四种类型

    它们之间的主要区别在于最大长度限制不同,从几千字节到几GB不等

    TEXT类型适用于存储文章、评论等需要大量文本数据的场景

    但需要注意的是,TEXT类型不支持默认值,并且在WHERE条件中使用TEXT字段可能会影响性能

     3. ENUM和SET类型 ENUM和SET类型都是枚举类型,用于存储预定义列表中的值

    ENUM类型允许从列表中选择一个值,而SET类型允许从列表中选择零个或多个值(最多64个选项)

    在创建表时,需要指定ENUM或SET类型的取值范围(以列表的形式)

    在存储时,MySQL实际上存储的是这些值在列表中的编号(而不是值本身),这可以节省存储空间并提高查询效率

    ENUM和SET类型适用于存储具有固定选项集的数据,如状态码、性别等

     四、二进制数据类型 二进制数据类型用于在数据库中存储二进制数据,如图像、文件等

    MySQL支持BINARY、VARBINARY、BIT、BLOB等多种二进制数据类型

     1. BINARY和VARBINARY类型 BINARY和VARBINARY类型类似于CHAR和VARCHAR类型,但存储的是二进制字符串(而不是非二进制字符串)

    这意味着它们没有字符集,并且排序和比较基于列值字节的数值值

    BINARY类型是固定长度二进制字符串,在创建表时就指定了长度

    VARBINARY类型是可变长度二进制字符串,在创建表时指定了最大长度,并根据实际存储的二进制数据长度动态调整存储空间

     2. BIT类型 BIT类型用于存储位值(0或1),可以指定位数(1 ≤ N ≤ 64)

    BIT类型适用于存储布尔值

MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道