Skip to content

数据类型

数值类型

整数类型

类型字节范围说明
TINYINT1-128 ~ 127小整数
SMALLINT2-32768 ~ 32767短整数
MEDIUMINT3-8388608 ~ 8388607中等整数
INT4-21亿 ~ 21亿标准整数
BIGINT8非常大大整数
sql
CREATE TABLE numbers (
    tiny_col TINYINT,
    int_col INT,
    bigint_col BIGINT
);

无符号整数

sql
CREATE TABLE unsigned_nums (
    positive_int INT UNSIGNED
);

浮点类型

类型说明
FLOAT单精度浮点数,4字节
DOUBLE双精度浮点数,8字节
DECIMAL精确小数,用于财务计算
sql
CREATE TABLE decimals (
    price DECIMAL(10, 2),
    rate FLOAT,
    amount DOUBLE
);

DECIMAL 精度说明

sql
DECIMAL(M, D)
  • M: 总位数(精度)
  • D: 小数位数(标度)
sql
salary DECIMAL(10, 2)

表示最多10位数字,其中2位小数,最大值 99999999.99

字符串类型

定长字符串

sql
CHAR(M)
  • 固定长度,不足补空格
  • M 范围: 0-255
  • 适合存储固定长度数据(如手机号、身份证)
sql
CREATE TABLE chars (
    phone CHAR(11),
    id_card CHAR(18)
);

变长字符串

sql
VARCHAR(M)
  • 可变长度,按实际存储
  • M 范围: 0-65535
  • 适合存储长度不固定的数据
sql
CREATE TABLE varchars (
    username VARCHAR(50),
    email VARCHAR(100)
);

TEXT 类型

类型最大长度说明
TINYTEXT255小文本
TEXT65535普通文本
MEDIUMTEXT16MB中等文本
LONGTEXT4GB大文本
sql
CREATE TABLE articles (
    title VARCHAR(200),
    content TEXT
);

CHAR vs VARCHAR

sql
CREATE TABLE compare (
    char_col CHAR(10),
    varchar_col VARCHAR(10)
);

INSERT INTO compare VALUES ('abc', 'abc');

SELECT LENGTH(char_col), LENGTH(varchar_col) FROM compare;

日期时间类型

日期类型

类型格式范围说明
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-31日期
TIMEHH:MM:SS-838:59:59 ~ 838:59:59时间
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 ~ 9999-12-31日期时间
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 ~ 2038-01-19时间戳
YEARYYYY1901 ~ 2155年份
sql
CREATE TABLE dates (
    birth_date DATE,
    work_time TIME,
    created_at DATETIME,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    year_col YEAR
);

DATETIME vs TIMESTAMP

特性DATETIMETIMESTAMP
存储8字节4字节
时区不转换自动转换
范围更大1970-2038
默认值支持支持 CURRENT_TIMESTAMP
sql
CREATE TABLE time_test (
    dt DATETIME,
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

二进制类型

类型说明
BINARY定长二进制
VARBINARY变长二进制
BLOB二进制大对象
TINYBLOB小 BLOB
MEDIUMBLOB中等 BLOB
LONGBLOB大 BLOB
sql
CREATE TABLE files (
    file_name VARCHAR(100),
    file_data BLOB
);

JSON 类型

MySQL 5.7+ 支持 JSON 类型:

sql
CREATE TABLE json_test (
    id INT PRIMARY KEY,
    data JSON
);

INSERT INTO json_test VALUES (1, '{"name": "张三", "age": 25}');

SELECT data->>'$.name' FROM json_test;
SELECT JSON_EXTRACT(data, '$.age') FROM json_test;

JSON 函数

sql
JSON_OBJECT('name', '张三', 'age', 25)
JSON_ARRAY(1, 2, 3)
JSON_EXTRACT(data, '$.name')
JSON_SET(data, '$.age', 26)
JSON_REMOVE(data, '$.age')

枚举和集合

ENUM 枚举

sql
CREATE TABLE users (
    status ENUM('active', 'inactive', 'banned') DEFAULT 'active'
);

INSERT INTO users (status) VALUES ('active');

SET 集合

sql
CREATE TABLE articles (
    tags SET('tech', 'life', 'travel', 'food')
);

INSERT INTO articles (tags) VALUES ('tech,life');

类型选择建议

数值类型

  • 主键: INT 或 BIGINT
  • 年龄: TINYINT UNSIGNED
  • 价格: DECIMAL

字符串类型

  • 固定长度: CHAR
  • 变长字符串: VARCHAR
  • 大文本: TEXT

日期时间

  • 日期: DATE
  • 时间戳: TIMESTAMP
  • 历史日期: DATETIME

下一步学习