MySQL数据类型
概述
MySQL支持各种数据类型,用于定义表列中可以存储的数据类型。选择正确的数据类型对于数据完整性、存储效率和查询性能至关重要。
数据类型分类
MySQL数据类型分为几类:
数值类型 - 整数、浮点数和小数类型 字符串类型 - 字符和二进制字符串 日期和时间类型 - 日期、时间和日期时间值 空间类型 - 地理和几何数据 JSON类型 - 结构化数据存储
数值类型
整数类型
整数类型存储整数(正数和负数):
| 数据类型 | Storage / 存储 | Range (Signed) / 范围(有符号) | Range (Unsigned) / 范围(无符号) |
|---|---|---|---|
| TINYINT | 1 byte | -128 to 127 | 0 to 255 |
| SMALLINT | 2 bytes | -32768 to 32767 | 0 to 65535 |
| MEDIUMINT | 3 bytes | -8388608 to 8388607 | 0 to 16777215 |
| INT / INTEGER | 4 bytes | -2147483648 to 2147483647 | 0 to 4294967295 |
| BIGINT | 8 bytes | -9223372036854775808 to 9223372036854775807 | 0 to 18446744073709551615 |
示例
-- Using UNSIGNED浮点类型
浮点类型存储近似数值:
| 数据类型 | Storage / 存储 | Description / 描述 |
|---|---|---|
| 单精度浮点 | ||
| 双精度浮点 | ||
| DOUBLE的别名 |
-- Using DECIMAL for exact values定点和数值类型
| 数据类型 | Syntax / 语法 | Description / 描述 |
|---|---|---|
| 精确数值,M位数字,D位小数 | ||
| 与DECIMAL相同 | ||
| 与DECIMAL相同 |
-- DECIMAL examples位值
| 数据类型 | Storage / 存储 | Range / 范围 |
|---|---|---|
| 8 bytes | 1 to 64 bits / 1到64位 |
布尔类型
MySQL使用TINYINT(1)表示布尔值:
-- Query with boolean conditions字符串类型
字符字符串类型
| 数据类型 | Max Length / 最大长度 | Description / 描述 |
|---|---|---|
| 定长字符串 | ||
| 变长字符串 | ||
| 非常短的文本 | ||
| 文本 | ||
| 中文本 | ||
| 长文本 |
CHAR与VARCHAR比较
-- CHAR: Fixed-length, padded with spaces
-- VARCHAR: Variable-length, no padding
-- Observe the difference文本类型
-- 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 / 描述 |
|---|---|---|
| 定长二进制 | ||
| 变长二进制 | ||
| 二进制大对象 | ||
| 二进制大对象 | ||
| 二进制大对象 | ||
| 二进制大对象 |
-- Binary data storage
-- Store SHA-256 hashENUM类型
-- Define possible values
-- Invalid values will cause error
-- INSERT INTO enum_demo (status) VALUES ('invalid'); -- Error
-- Check valid valuesSET类型
-- Store multiple values from a defined set
-- Query using FIND_IN_SET日期和时间类型
日期和时间概述
| 数据类型 | Storage / 存储 | Range / 范围 | Description / 描述 |
|---|---|---|---|
| 仅日期 | |||
| 仅时间 | |||
| 日期和时间 | |||
| Unix时间戳 | |||
| 年份值 |
DATE类型
-- Date only (YYYY-MM-DD)
-- Date functions
-- Date arithmeticTIME类型
-- Time only (HH:MM:SS or HH:MM:SS.microseconds)
-- Time functionsDATETIME类型
-- Date and time (YYYY-MM-DD HH:MM:SS)
-- DATETIME functions
-- DATETIME arithmeticTIMESTAMP类型
-- 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-2038YEAR类型
-- Year value (4-digit format)JSON类型
MySQL 5.7.8+支持原生JSON数据类型:
-- JSON type for structured data
-- Insert JSON data
-- JSON extraction
-- JSON validation
-- JSON comparison
-- Create JSON空间类型
MySQL支持用于地理和几何数据的空间数据类型:
-- Spatial data types
-- Insert spatial data
-- Spatial functions选择数据类型
最佳实践
使用适当的整数大小 - 选择适合数据范围的最小整数类型
对货币值使用DECIMAL - 浮点数不适合财务数据
对可变长度数据使用VARCHAR而不是CHAR - 节省存储空间
使用适当的TEXT类型 - 根据预期数据大小选择
对固定集合使用ENUM - 高效存储有限选项
适当使用DATETIME与TIMESTAMP - 考虑时区要求
对半结构化数据使用JSON - 灵活的模式
数据类型选择指南
| 数据类型 | When to Use / 使用时机 |
|---|---|
| 布尔标志、小计数器 | |
| 主键、计数器、数量 | |
| 大计数器、财务金额 | |
| 金钱、精确测量 | |
| DOUBLE | Scientific 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数据库。
上一个:选择数据库
下一个:创建表