MySQL 数据类型详解


1. 字符类型

VARCHAR

  • 定义VARCHARCHARACTER VARYING 的缩写,用于存储可变长度的字符串。
  • 特点
    • VARCHAR否 表示最多可以存储 n 个字符,n 的最大值为 65,535(受行大小限制)。
    • 实际存储所需的空间为字符串长度(L)加上 1 或 2 个字节(记录字符串长度)。如果 L < 255,占用 1 个字节;否则占用 2 个字节。
    • 例如,字符串 'abcd' 的长度为 4,占用 5 个字节。

CHAR

  • 定义CHAR否VARCHAR否 类似,但它的存储长度是固定的。
  • 特点
    • 无论实际存储的字符串有多长,CHAR否 都会占用固定的空间。
    • 虽然占用空间较多,但在索引搜索时比 VARCHAR 快约 20%。

2. 文本和二进制大对象

TEXT 和 BLOB

  • 定义:用于存储较大的文本或二进制数据,最大长度为 65,535 个字符。
  • 特点
    • 实际存储空间为数据长度加上 2 个字节(若长度 < 255,则为 1 个字节)。
    • 数据存储在表的数据文件之外,这使得涉及 TEXTBLOB 数据的操作(如 INSERTUPDATEDELETESELECT)速度较慢,但其他操作速度更快。

3. 数值类型

整数类型(INT)

  • 特点
    • INT 的最大无符号值为 4,294,967,295。
    • 默认是 SIGNED(有符号),若需要存储负数,需显式声明 SIGNED
    • 如需存储更大的数值(如 1234567890123456789),应使用 BIGINT
    • 布尔值通常用 TINYINT(1) 表示。
  • 括号中的数字:括号内的数字(如 INT(11))仅影响显示宽度,与存储大小无关。

DECIMAL

  • 定义DECIMAL(n, m) 用于存储精确的小数。
    • n 是总位数,m 是小数位数。
    • 例如,DECIMAL(4, 2) 表示最多存储 4 位,其中 2 位为小数部分,可存储范围为 -99.99 至 99.99。

4. 日期和时间类型

日期和时间类型

  • DATE:仅存储日期,格式为 'YYYY-MM-DD'
  • DATETIME:存储日期和时间,格式为 'YYYY-MM-DD HH:MM:SS'
  • TIMESTAMP:与 DATETIME 类似,但范围仅限于 1970-01-01 至 2037-12-31。
  • TIME:仅存储时间,格式为 'HH:MM:SS',支持时间间隔(如 -02:00:00 表示过去两个小时)。
  • YEAR:仅存储年份。

注意事项

  • 操作日期时,必须指定完整的日期值,而不能仅指定时间。
  • FROM_UNIXTIME() 用于将 Unix 时间戳转换为日期时间格式。
    SELECT FROM_UNIXTIME(0);  -- 输出 '1970-01-01 00:00:00'
    SELECT FROM_UNIXTIME(2145916799);  -- 输出 '2037-12-31 23:59:59'
    SELECT FROM_UNIXTIME(2145916800);  -- 输出 NULL(超出范围)
    

5. 集合类型

SET

  • 定义SET 数据类型允许从预定义字符串列表中存储任意组合。
  • 特点
    • 可以存储多个值,从 0 到所有值。
    • 例如:
      SET("madam", "mister")
      
      可以存储:
      • 空值
      • "madam"
      • "mister"
      • "madam, mister"

ENUM

  • 定义ENUM 数据类型用于从预定义字符串列表中选择一个值。
  • 特点
    • 只能存储单个值。
    • 例如:
      ENUM("madam", "mister")
      
      只能存储:
      • 空值
      • "madam"
      • "mister"

6. 参考资料

最后修改: 2025年01月17日 星期五 19:24