Skip to content

MySQL数据类型

概述

MySQL支持各种数据类型,用于定义表列中可以存储的数据类型。选择正确的数据类型对于数据完整性、存储效率和查询性能至关重要。

数据类型分类

MySQL数据类型分为几类:

数值类型 - 整数、浮点数和小数类型 字符串类型 - 字符和二进制字符串 日期和时间类型 - 日期、时间和日期时间值 空间类型 - 地理和几何数据 JSON类型 - 结构化数据存储

数值类型

整数类型

整数类型存储整数(正数和负数):

数据类型Storage / 存储Range (Signed) / 范围(有符号)Range (Unsigned) / 范围(无符号)
TINYINT1 byte-128 to 1270 to 255
SMALLINT2 bytes-32768 to 327670 to 65535
MEDIUMINT3 bytes-8388608 to 83886070 to 16777215
INT / INTEGER4 bytes-2147483648 to 21474836470 to 4294967295
BIGINT8 bytes-9223372036854775808 to 92233720368547758070 to 18446744073709551615

示例

sql

-- Using UNSIGNED

浮点类型

浮点类型存储近似数值:

数据类型Storage / 存储Description / 描述
单精度浮点
双精度浮点
DOUBLE的别名
sql

-- Using DECIMAL for exact values

定点和数值类型

数据类型Syntax / 语法Description / 描述
精确数值,M位数字,D位小数
与DECIMAL相同
与DECIMAL相同
sql
-- DECIMAL examples

位值

数据类型Storage / 存储Range / 范围
8 bytes1 to 64 bits / 1到64位
sql

布尔类型

MySQL使用TINYINT(1)表示布尔值:

sql

-- Query with boolean conditions

字符串类型

字符字符串类型

数据类型Max Length / 最大长度Description / 描述
定长字符串
变长字符串
非常短的文本
文本
中文本
长文本

CHAR与VARCHAR比较

sql
-- CHAR: Fixed-length, padded with spaces

-- VARCHAR: Variable-length, no padding

-- Observe the difference

文本类型

sql
-- TINYTEXT: Very short strings (up to 255 characters)

-- TEXT: Standard text (up to 65,535 bytes)

-- MEDIUMTEXT: Medium-length text (up to 16 MB)

-- LONGTEXT: Long text (up to 4 GB)

二进制字符串类型

数据类型Max Length / 最大长度Description / 描述
定长二进制
变长二进制
二进制大对象
二进制大对象
二进制大对象
二进制大对象
sql
-- Binary data storage

-- Store SHA-256 hash

ENUM类型

sql
-- Define possible values

-- Invalid values will cause error
-- INSERT INTO enum_demo (status) VALUES ('invalid');  -- Error

-- Check valid values

SET类型

sql
-- Store multiple values from a defined set

-- Query using FIND_IN_SET

日期和时间类型

日期和时间概述

数据类型Storage / 存储Range / 范围Description / 描述
仅日期
仅时间
日期和时间
Unix时间戳
年份值

DATE类型

sql
-- Date only (YYYY-MM-DD)

-- Date functions

-- Date arithmetic

TIME类型

sql
-- Time only (HH:MM:SS or HH:MM:SS.microseconds)

-- Time functions

DATETIME类型

sql
-- Date and time (YYYY-MM-DD HH:MM:SS)

-- DATETIME functions

-- DATETIME arithmetic

TIMESTAMP类型

sql
-- Timestamp (stored as UTC, displayed in session timezone)

-- TIMESTAMP characteristics
-- - Automatically converts between timezones
-- - Default value is CURRENT_TIMESTAMP
-- - Updates automatically on row modification
-- - Range limited to 1970-2038

YEAR类型

sql
-- Year value (4-digit format)

JSON类型

MySQL 5.7.8+支持原生JSON数据类型:

sql
-- JSON type for structured data

-- Insert JSON data

-- JSON extraction

-- JSON validation

-- JSON comparison

-- Create JSON

空间类型

MySQL支持用于地理和几何数据的空间数据类型:

sql
-- Spatial data types

-- Insert spatial data

-- Spatial functions

选择数据类型

最佳实践

使用适当的整数大小 - 选择适合数据范围的最小整数类型

对货币值使用DECIMAL - 浮点数不适合财务数据

对可变长度数据使用VARCHAR而不是CHAR - 节省存储空间

使用适当的TEXT类型 - 根据预期数据大小选择

对固定集合使用ENUM - 高效存储有限选项

适当使用DATETIME与TIMESTAMP - 考虑时区要求

对半结构化数据使用JSON - 灵活的模式

数据类型选择指南

数据类型When to Use / 使用时机
布尔标志、小计数器
主键、计数器、数量
大计数器、财务金额
金钱、精确测量
DOUBLEScientific measurements, approximate values / 科学测量、近似值
固定长度代码、状态值
名称、描述、可变文本
长文章、评论
出生日期、入职日期、截止日期
时间戳、预定事件
会话时间戳、自动更新字段
配置数据、灵活属性
状态、优先级、有限选项的类别
从固定选项中多选

小结

MySQL为各种数据存储需求提供全面的数据类型:

数值类型:从TINYINT到BIGINT,带有符号和无符号选项 字符串类型:CHAR、VARCHAR、TEXT满足不同长度需求 Time Types**: DATE, TIME, DATETIME, TIMESTAMP for temporal data / 日期/时间类型:DATE、TIME、DATETIME、TIMESTAMP用于时间数据 JSON类型:对半结构化数据的原生JSON支持 空间类型:地理和几何数据支持 SET**: Predefined value sets / ENUM/SET:预定义值集

选择正确的数据类型会影响:

存储效率 查询性能 数据完整性 应用程序功能

下一步

create-database.md)以了解如何创建和管理MySQL数据库。


上一个:选择数据库

下一个:创建表