MySQL 数据类型
在 MySQL 中,数据类型的选择对数据库性能和优化至关重要。MySQL 提供了多种数据类型,主要分为以下三大类:数值类型、日期/时间类型 和 字符串(字符)类型。每种类型都有特定的用途,选择合适的数据类型可以提高查询效率、减少存储空间以及优化数据库性能。
1. 数值类型
数值类型用于存储数字数据,可以分为 整数类型 和 浮动点类型。
1.1 整数类型
整数类型用于存储没有小数部分的数值。MySQL 提供了多种整数类型,可以根据数据的大小和存储需求选择适当的类型。
- TINYINT:存储极小的整数,通常用于表示布尔值(-128 到 127 或 0 到 255)
TINYINT
- SMALLINT:存储较小的整数(-32,768 到 32,767 或 0 到 65,535)
SMALLINT
- MEDIUMINT:存储中等范围的整数(-8,388,608 到 8,388,607 或 0 到 16,777,215)
MEDIUMINT
- INT / INTEGER:常用的整数类型(-2,147,483,648 到 2,147,483,647 或 0 到 4,294,967,295)
INT
- BIGINT:存储较大的整数(-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 或 0 到 18,446,744,073,709,551,615)
BIGINT
1.2 浮动点类型
浮动点类型用于存储带有小数部分的数值。常用于存储货币金额或精确度要求较高的计算结果。
- FLOAT:存储单精度浮动点数,通常用于精度要求不高的数据(最大 24 位有效数字)
FLOAT
- DOUBLE:存储双精度浮动点数,通常用于精度要求较高的数据(最大 53 位有效数字)
DOUBLE
- DECIMAL / NUMERIC:用于存储精确的小数,特别适用于财务数据。它具有固定的小数点精度,避免了浮动点数的舍入误差。
DECIMAL(10,2)
实例:整数和浮动点类型
CREATE TABLE product (
id INT AUTO_INCREMENT,
price DECIMAL(10, 2),
quantity INT,
PRIMARY KEY (id)
);
2. 日期/时间类型
日期和时间类型用于存储日期和时间数据,MySQL 提供了以下几种常见的日期/时间类型。
- DATE:存储日期(格式:
YYYY-MM-DD)
DATE
- DATETIME:存储日期和时间(格式:
YYYY-MM-DD HH:MM:SS)
DATETIME
- TIMESTAMP:存储时间戳(格式:
YYYY-MM-DD HH:MM:SS),通常用于记录数据的创建或修改时间。会随系统时间自动更新。
TIMESTAMP
- TIME:存储时间(格式:
HH:MM:SS)
TIME
- YEAR:存储年份(格式:
YYYY)
YEAR
实例:日期/时间类型
CREATE TABLE events (
event_id INT AUTO_INCREMENT,
event_name VARCHAR(100),
event_date DATE,
event_time TIME,
PRIMARY KEY (event_id)
);
3. 字符串(字符)类型
字符串类型用于存储文本数据。MySQL 提供了多种字符串类型,每种类型适合不同的存储需求。
3.1 定长字符串类型
- CHAR:定长字符串类型,适用于长度固定的字符串(最大 255 个字符)。如果插入的字符串长度小于定义的长度,MySQL 会自动补充空格。
CHAR(50)
3.2 变长字符串类型
- VARCHAR:变长字符串类型,适用于长度不固定的字符串。
VARCHAR存储的是实际字符串长度,不会占用额外空间。
VARCHAR(255)
- TEXT:存储长文本数据,最大长度为 65,535 字节。
TEXT类型适用于存储文章、描述等较大的文本数据。
TEXT
- TINYTEXT:存储短文本数据,最大长度为 255 字节。
TINYTEXT
- MEDIUMTEXT:存储中等长度的文本数据,最大长度为 16,777,215 字节。
MEDIUMTEXT
- LONGTEXT:存储长文本数据,最大长度为 4,294,967,295 字节。
LONGTEXT
3.3 二进制字符串类型
- BINARY:定长二进制数据类型,适用于存储固定长度的二进制数据。
BINARY(16)
- VARBINARY:变长二进制数据类型,适用于存储长度不固定的二进制数据。
VARBINARY(255)
- BLOB:存储二进制大对象数据,最大长度为 65,535 字节。适用于存储图像、音频等二进制数据。
BLOB
实例:字符串类型
CREATE TABLE users (
user_id INT AUTO_INCREMENT,
username VARCHAR(50),
email VARCHAR(100),
password_hash CHAR(64),
profile_picture BLOB,
PRIMARY KEY (user_id)
);
4. 总结
MySQL 提供了多种数据类型来满足不同的存储需求,合理的选择数据类型对数据库的性能和优化至关重要。选择时考虑以下几点:
- 数值类型:选择合适的整数或浮动点类型,避免选择过大或过小的数据类型。
- 日期/时间类型:根据需要存储的时间精度选择合适的日期/时间类型。
- 字符串类型:根据字段内容的长度和特点选择定长或变长的字符串类型。
选择合适的数据类型可以节省存储空间、提高查询效率、减少性能开销。