MySQL提供了丰富的数值类型,用于存储不同范围的数字数据。选择合适的数值类型对于节省存储空间和提高查询性能非常重要。
| 类型 | 大小 | 有符号范围 | 无符号范围 | 用途 |
|---|---|---|---|---|
| TINYINT | 1字节 | -128 到 127 | 0 到 255 | 小整数、状态标记 |
| SMALLINT | 2字节 | -32768 到 32767 | 0 到 65535 | 小整数、ID |
| MEDIUMINT | 3字节 | -8388608 到 8388607 | 0 到 16777215 | 中等整数 |
| INT | 4字节 | -2147483648 到 2147483647 | 0 到 4294967295 | 常规整数、ID |
| BIGINT | 8字节 | -9223372036854775808 到 9223372036854775807 | 0 到 18446744073709551615 | 大整数、时间戳 |
| DECIMAL(M,D) | 变长 | 可变 | 可变 | 金额、价格、精确计算 |
| FLOAT | 4字节 | ±1.175494351e-38 到 ±3.402823466e+38 | 同上 | 科学计算、精度要求不高的小数 |
| DOUBLE | 8字节 | ±2.2250738585072014e-308 到 ±1.7976931348623157e+308 | 同上 | 科学计算、精度要求较高的小数 |
-- 数值类型示例
age TINYINT UNSIGNED, -- 年龄 0-255
user_id INT AUTO_INCREMENT, -- 自增ID
price DECIMAL(10,2), -- 价格 10位数字,2位小数
score FLOAT -- 分数
MySQL提供了多种字符串类型,用于存储不同长度和类型的文本数据。选择合适的字符串类型对于存储效率和查询性能至关重要。
| 类型 | 最大长度 | 存储方式 | 用途 |
|---|---|---|---|
| CHAR(N) | 255字符 | 定长,不足用空格填充 | 手机号、身份证号、邮编等固定长度数据 |
| VARCHAR(N) | 65535字符 | 变长,存储实际长度+1字节 | 用户名、邮箱、地址等长度变化的数据 |
| TINYTEXT | 255字符 | 变长 | 简短描述、备注 |
| TEXT | 65535字符 | 变长 | 文章内容、详细描述 |
| MEDIUMTEXT | 16MB | 变长 | 长文章、日志 |
| LONGTEXT | 4GB | 变长 | 大型文档、二进制数据 |
-- 字符串类型示例
username VARCHAR(50), -- 用户名
email VARCHAR(100), -- 邮箱
phone CHAR(11), -- 手机号(定长)
description TEXT, -- 描述
content LONGTEXT, -- 文章内容
status TINYTEXT -- 状态信息
MySQL提供了多种日期时间类型,用于存储不同精度的日期和时间数据。选择合适的日期时间类型对于数据准确性和查询性能非常重要。
| 类型 | 格式 | 范围 | 大小 | 用途 |
|---|---|---|---|---|
| DATE | YYYY-MM-DD | 1000-01-01 到 9999-12-31 | 3字节 | 生日、订单日期、事件日期 |
| TIME | HH:MM:SS | -838:59:59 到 838:59:59 | 3字节 | 登录时间、会议时长、运行时间 |
| DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 到 9999-12-31 | 8字节 | 创建时间、更新时间、事件时间 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 到 2038-01-19 | 4字节 | 自动记录时间戳、版本控制 |
| YEAR | YYYY | 1901 到 2155 | 1字节 | 年份、毕业年份、生产年份 |
-- 日期时间类型示例
birthday DATE, -- 生日
login_time TIME, -- 登录时间
created_at DATETIME, -- 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 自动更新时间戳
graduation_year YEAR -- 毕业年份