MySQL核心数据类型解析
数据类型概览
MySQL支持多种数据类型,主要分为数值、字符串、日期/时间和特殊类型四大类。
数值类型
tinyint类型
整型数据,可指定有符号(-128~127)或无符号(0~255)范围。默认有符号,使用UNSIGNED关键字定义无符号类型。建议直接使用bigint替代unsigned int扩展存储范围。
CREATE TABLE num_test (
id INT,
age TINYINT UNSIGNED
);
bit类型
位字段类型,语法为BIT(M),M表示位数(1-64),默认1位。显示时按ASCII码解析,不可打印字符可能不显示。
CREATE TABLE bit_demo (
flags BIT(8)
);
INSERT INTO bit_demo VALUES (b'10101010');
float类型
单精度浮点数,语法FLOAT(M,D)。M为总位数,D为小数位,占用4字节。精度约6-7位有效数字。
CREATE TABLE float_sample (
value FLOAT(5,2)
);
INSERT INTO float_sample VALUES (123.456);
decimal类型
高精度定点数,语法DECIMAL(M,D)。M最大65位,D最大30位小数。适用于需要精确计算的场景。
CREATE TABLE decimal_example (
price DECIMAL(10,2)
);
字符串类型
char类型
定长字符串,语法CHAR(L),L为字符数(最大255)。存储空间固定,效率高。
CREATE TABLE char_demo (
country CHAR(20)
);
INSERT INTO char_demo VALUES ('中国');
varchar类型
变长字符串,语法VARCHAR(L),L为最大字节数(上限65535字节)。实际存储空间按需分配。
CREATE TABLE varchar_sample (
address VARCHAR(100)
);
实际长度限制取决于字符编码:UTF8编码最大21844字符,GBK编码最大32766字符。
类型选择策略
- 固定长度数据(如身份证号)使用CHAR
- 长度变化数据(如地址)使用VARCHAR
日期时间类型
常用类型:
- DATE:日期(YYYY-MM-DD),3字节
- DATETIME:日期时间(YYYY-MM-DD HH:MM:SS),8字节
- TIMESTAMP:时间戳(1970年起),4字节,可自动更新
CREATE TABLE time_demo (
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
枚举与集合类型
ENUM类型
单选枚举值,存储为数字索引(1,2,3...)。
CREATE TABLE enum_example (
status ENUM('active','inactive')
);
SET类型
多选集合,存储为位掩码(1,2,4,8...)。
CREATE TABLE set_demo (
hobbies SET('hiking','swimming','reading')
);
INSERT INTO set_demo VALUES ('hiking,reading');
使用FIND_IN_SET()函数查询:
SELECT * FROM set_demo
WHERE FIND_IN_SET('hiking', hobbies) > 0;