【MySQL02】: MySQL类型
MySQL数据类型详解=
数值类型
整数类型
MySQL提供了多种整数类型,每种类型的存储空间和取值范围如下:
| 类型 | 字节 | 有符号范围 | 无符号范围 |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 |
重要特性:
- 使用
UNSIGNED关键字可声明无符号整数 - MySQL严格检查数据完整性,插入越界值会导致错误而非截断
位类型
BIT(M):M表示位数,范围1~64- 适用场景:状态标志、位图存储
浮点与精确小数类型
FLOAT类型
- 语法:
FLOAT[(M,D)] [UNSIGNED]- M:总位数
- D:小数位数
- 示例:
FLOAT(4,2)范围:-99.99 ~ 99.99
DECIMAL类型
- 高精度定点数,适合财务等需要精确计算的场景
- 与FLOAT比较:
- FLOAT:可能进行四舍五入
- DECIMAL:保持精确值
字符串类型
定长与变长字符串
| 类型 | 特点 | 最大长度 | 存储方式 |
|---|---|---|---|
| CHAR(L) | 定长 | 255字符 | 固定分配空间 |
| VARCHAR(L) | 变长 | 65,535字节 | 动态分配+长度记录 |
选型建议:
CHAR:数据长度固定(如MD5哈希、邮编)VARCHAR:数据长度变化大(如用户名、地址)
注意:MySQL字符串以字符为单位,不同于C/C++的字节单位
日期时间类型
| 类型 | 格式 | 字节 | 特点 |
|---|---|---|---|
| DATE | ‘YYYY-MM-DD’ | 3 | 仅日期 |
| DATETIME | ‘YYYY-MM-DD HH:MM:SS’ | 8 | 日期时间 |
| TIMESTAMP | 时间戳 | 4 | 自动更新 |
枚举与集合类型
ENUM类型
- 单选枚举值
- 可通过数字下标访问(1-based)
SET类型
- 多选值集合
- 存储为位图格式
- 示例用法:
INSERT INTO test_set VALUES ("hrj", 1, "羽毛球,代码");
集合查询技巧
-
精确匹配:
SELECT * FROM table_name WHERE key='值'; -
包含查询:
-- 查找包含任意指定项的记录 SELECT * FROM test_set WHERE FIND_IN_SET("羽毛球", hobby) OR FIND_IN_SET("代码", hobby);-- 查找包含所有指定项的记录 SELECT * FROM test_set WHERE hobby LIKE '%羽毛球%' AND hobby LIKE '%代码%'; -
位运算查询(高效方式):
-- 假设羽毛球=1, 代码=2 SELECT * FROM test_set WHERE hobby & 3 = 3;
注意:MySQL中空串(‘’)与NULL是不同的概念
