数据类型选择原则
1. 精确性原则:始终使用最精确的数据类型来存储数据
2. 性能优化:正确的数据类型能提高查询效率并减少存储空间
3. 避免通用字符串类型:虽然字符串类型通用,但不适合所有场景
各类型选择指南
数值类型
整数:使用整数类型(INT, SMALLINT等)
无符号数:添加UNSIGNED关键字
根据范围选择:TINYINT(0-255)、SMALLINT(0-65535)等
小数:
精确计算(如货币):使用DECIMAL(M,D)
近似值:使用FLOAT或DOUBLE
电话号码/身份证号:虽然包含数字,但应使用字符串类型(VARCHAR)以避免丢失前导零
日期时间类型
仅年份:YEAR
仅时间:TIME
日期+时间:
一般范围:DATETIME
自动更新/较小范围:TIMESTAMP
可选时间部分:使用DATE+TIME(NULL)组合
字符串类型
短字符串(<256字符):CHAR、VARCHAR或TINYTEXT
长文本:VARCHAR或TEXT类型
固定集合值:考虑ENUM或SET
ENUM:单值选择(如性别)
SET:多值选择(如兴趣爱好)
CHAR vs VARCHAR
特性 | CHAR | VARCHAR |
---|---|---|
长度 | 固定 | 可变 |
尾部空格 | 自动删除 | 保留 |
性能 | 更快 | 稍慢 |
存储效率 | 可能浪费空间 | 更节省空间 |
存储引擎 | MyISAM推荐 | InnoDB推荐 |
二进制类型
BLOB:存储二进制数据(图片、音频等)
TEXT:存储纯文本
根据大小选择:TINYBLOB(255B)、BLOB(65KB)、MEDIUMBLOB(16MB)、LONGBLOB(4GB)
重要注意事项
1. 数值与字符串排序差异:数字2<11,但字符串'2'>'11'
2. 强制类型转换问题:避免让MySQL将字符串当作数字处理,会导致:
性能下降(需要逐行转换)
无法使用索引
3. 扩展性考虑:如果不确定范围,可以先选择较大类型,后续用ALTER TABLE调整
4. 存储引擎影响:
MyISAM:固定长度(CHAR)性能更好
InnoDB:可变长度(VARCHAR)更节省空间
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程