阿里云备案网站备案,网页界面设计的网格系统由什么组成,产品软文是什么意思,南宁网站制作最新招聘信息MySQL 数据类型全面指南#xff1a;详细说明与关键注意事项
MySQL 提供了丰富的数据类型#xff0c;合理选择对数据库性能、存储效率和数据准确性至关重要。以下是所有数据类型的详细说明及使用注意事项#xff1a; 一、数值类型
整数类型
类型字节有符号范围无符号范围说…MySQL 数据类型全面指南详细说明与关键注意事项
MySQL 提供了丰富的数据类型合理选择对数据库性能、存储效率和数据准确性至关重要。以下是所有数据类型的详细说明及使用注意事项 一、数值类型
整数类型
类型字节有符号范围无符号范围说明TINYINT1-128 ~ 1270 ~ 255小整数如状态值SMALLINT2-32,768 ~ 32,7670 ~ 65,535较小整数MEDIUMINT3-8M ~ 8M-10 ~ 16M-1中等整数INT4-2.1B ~ 2.1B-10 ~ 4.2B-1标准整数最常用BIGINT8-9.2E18 ~ 9.2E18-10 ~ 1.8E19-1大整数如主键ID
注意事项
优先选择能满足需求的最小类型TINYINT SMALLINT INT BIGINT无符号整数用 UNSIGNED 关键字INT UNSIGNEDZEROFILL 自动添加 UNSIGNED 并用0填充INT(5) ZEROFILL显示宽度(如INT(11))仅影响显示不影响存储大小
浮点数类型
类型字节说明FLOAT4单精度浮点数约7位精度DOUBLE8双精度浮点数约15位精度DECIMAL变长精确小数财务计算首选
语法
DECIMAL(M, D) -- M总位数(1-65), D小数位数(0-30)注意事项
FLOAT/DOUBLE 有精度损失风险财务计算必须用 DECIMAL-- 错误示例
FLOAT: 0.1 0.2 0.30000001192092896-- 正确方案
DECIMAL(10,2): 0.1 0.2 0.30DECIMAL(5,2) 范围-999.99 ~ 999.99存储空间计算CEILING(M/9)*4 字节如 DECIMAL(20,6) 占9字节 二、日期时间类型
类型格式范围字节说明DATE‘YYYY-MM-DD’‘1000-01-01’ ~ ‘9999-12-31’3日期值TIME‘HH:MM:SS[.fraction]’‘-838:59:59’ ~ ‘838:59:59’3时间值可含毫秒DATETIME‘YYYY-MM-DD HH:MM:SS’‘1000-01-01 00:00:00’ ~ ‘9999-12-31 23:59:59’5-8日期时间推荐使用TIMESTAMP‘YYYY-MM-DD HH:MM:SS’‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-19 03:14:07’ UTC4时间戳自动转换时区YEARYYYY1901 ~ 21551年份值
注意事项
TIMESTAMP 的 2038年问题最大到 2038-01-19新系统建议用 DATETIME时区处理 TIMESTAMP 存 UTC 时间检索时转当前时区DATETIME 按字面值存储不转换时区 默认值和自动更新-- 自动设置创建时间
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,-- 自动更新修改时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP存储空间优化 只需要日期用 DATE (3字节)只需要时间用 TIME (3字节) 三、字符串类型
定长字符串
类型最大长度特点CHAR(n)255字符固定长度空格填充检索快
适用场景固定长度数据MD5、国家代码、邮编
变长字符串
类型最大长度特点VARCHAR(n)65,535字节按需存储节省空间
注意事项
n 表示字符数而非字节数UTF8MB4 中 1字符4字节实际存储空间 字符数 × 字符集字节 长度前缀(1-2字节)最大长度限制-- UTF8MB4下实际最大字符数
65,535 / 4 ≈ 16,383 字符文本类型
类型最大长度特点TINYTEXT255字节短文本TEXT64KB (65,535字节)标准文本文章内容MEDIUMTEXT16MB较大文本书籍章节LONGTEXT4GB超大文本整个文档
注意事项
与 VARCHAR 区别 TEXT 类型不能有默认值排序使用磁盘临时表VARCHAR 优先用内存 使用建议 255字符VARCHAR255字符~64KBTEXT 64KBMEDIUMTEXT/LONGTEXT 四、二进制数据类型
二进制字符串
类型说明BINARY(n)定长二进制最大255字节VARBINARY(n)变长二进制最大65,535字节
适用场景加密数据、哈希值
二进制大对象BLOB
类型最大长度说明TINYBLOB255字节小二进制对象BLOB64KB标准二进制对象MEDIUMBLOB16MB中等二进制对象LONGBLOB4GB超大二进制对象
注意事项
与 TEXT 类型区别 BLOB 存储二进制数据如图片、PDFTEXT 存储字符数据 性能影响大 BLOB 会显著增加 I/O 负载 五、枚举与集合类型
枚举类型 (ENUM)
gender ENUM(Male, Female, Other)特点单选值内部存储为整数1-2字节注意事项 避免超过 65,535 个选项插入非列表值会报错严格模式或存空字符串
集合类型 (SET)
permissions SET(Read, Write, Delete, Admin)特点多选值按位存储1-8字节注意事项 最大64个选项查询用 FIND_IN_SET()WHERE FIND_IN_SET(Write, permissions) 六、JSON 类型 (MySQL 5.7)
user_profile JSON操作示例
-- 插入
INSERT INTO users VALUES ({name: John, age: 30});-- 查询
SELECT user_profile-$.name FROM users;-- 更新
UPDATE users SET user_profile JSON_SET(user_profile, $.age, 31);注意事项
优势 自动验证JSON格式高效读取无需解析整个文档 限制 最大大小同 LONGTEXT (4GB)不支持直接索引需生成列索引 数据类型选择最佳实践 精确数值计算 ✅ 用 DECIMAL ❌ 避免 FLOAT/DOUBLE 时间存储 ✅ 用 DATETIME无2038限制 ❌ 避免 TIMESTAMP 长期存储 字符串优化 ✅ 定长用 CHAR如 UUID、MD5 ✅ 变长用 VARCHAR255字符 ✅ 大文本用 TEXT 存储空间敏感场景 小整数TINYINT UNSIGNED1字节状态值ENUM1-2字节日期DATE3字节 性能关键点 CHAR vs VARCHAR定长字段 CHAR 检索更快TEXT/BLOB避免 SELECT *单独存储大字段整型索引比字符型快 常见错误案例
错误1用 VARCHAR 存数字
-- 错误数字比较需隐式转换
SELECT * FROM products WHERE product_id 100; -- 优化改为 INT
ALTER TABLE products MODIFY product_id INT;错误2日期范围查询
-- 错误字符串比较低效
SELECT * FROM orders WHERE order_date BETWEEN 2023-01-01 AND 2023-01-31;-- 优化用日期函数
SELECT * FROM orders
WHERE order_date 2023-01-01 AND order_date 2023-02-01;错误3ENUM 滥用
-- 错误选项过多
color ENUM(red,green,blue, ... 100 colors);-- 优化改用关联表
CREATE TABLE colors (id TINYINT, name VARCHAR(20));合理选择数据类型是数据库优化的基础需结合业务需求、存储成本和性能要求综合决策。