在我们程序员做产品实现功能的时候。有一个合理的架构设计,可以避免很多不必要的开发问题、难点,痛点。
所以我推出:“杜绝傻逼设计”口号,我也整理一些我自己开发总结。MySQL字段设选型的笔记!
MySQL多种类型可选类型对比
- 整数类型:
TINYINT
:1 字节,范围为 -128 到 127(有符号)或 0 到 255(无符号)。。SMALLINT
:2 字节,范围为 -32,768 到 32,767(有符号)或 0 到 65,535(无符号)INT
:4 字节,范围为 -2,147,483,648 到 2,147,483,647(有符号)或 0 到 4,294,967,295(无符号)。BIGINT
:8 字节,范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(有符号)或 0 到 18,446,744,073,709,551,615(无符号)。
- 浮点数类型:
FLOAT
:4 字节,单精度浮点数。DOUBLE
:8 字节,双精度浮点数。DECIMAL
:可变长度,用于存储精确的小数值。
- 字符串类型:
CHAR
:固定长度字符串,最多可存储 255 个字符。VARCHAR
:可变长度字符串,最多可存储 65,535 个字符。TEXT
:可变长度文本字符串,最多可存储约 65,535 个字符。
- 日期和时间类型:
适用于只需要存储日期而不需要时间的情况,例如生日、会议日期等。DATE
:存储日期,格式为 'YYYY-MM-DD'。适用于只需要存储时间而不需要日期的情况,例如活动时间、持续时间等。TIME
:存储时间,格式为 'HH:MM:SS'。DATETIME
:存储日期和时间,格式为 'YYYY-MM-DD HH:MM:SS'。可以存储的日期范围从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。由于其范围较大,当使用DATETIME
类型作为索引列时,索引可能会占用较大的空间,这可能会对查询性能产生一些影响。适用于需要同时存储日期和时间的情况,例如事件发生时间、订单创建时间等。TIMESTAMP
:存储日期和时间,格式为 'YYYY-MM-DD HH:MM:SS',可以存储的日期范围从 '1970-01-01 00:00:01' 到 '2038-01-19 03:14:07'。自动进行时区转换。适用于需要记录时间戳的情况,例如数据修改时间、日志时间等。(因为时间范围限制,以及可能存在数据类型在where条件查询时,字段类型不一样,进而导致索引失效问题,故时间单位推荐使用TIMESTAMP
类型在插入或更新记录时会自动更新为当前时间,因此它通常用于跟踪记录的修改时间。DATETIME
)
- 二进制类型:(一般不建议数据库存储二进制类型)
BINARY
:固定长度的二进制字符串。VARBINARY
:可变长度的二进制字符串。BLOB
:可变长度的二进制大对象,用于存储大量二进制数据。
字段类型选择总结
- 时间类型:统一设定为 DATETIME 优点:支持丰富的日期时间函数,可以直接对日期时间进行操作和计算,例如提取年份、月份、日期,进行加减运算等。(这里为啥不用bigint:虽然bigint精度、范围高,但是在对于日期函数处理上,差太多了。可读性也差一点。统一为DATETIME相对更好一点)
- 货币类型:统一设定为 decimal 长度按需设计 小数点 按需设计 优点:更加准确
- 短字符串:也建议VARCHAR
- 普通字符串:VARCHAR
- 超长文本:TEXT 范围是0-65535字节的长文本数据
- 账号数字:可以选择int 4字节 个人认为有争议,如果一旦要去模糊搜索,就会导致索引失效,建议给账号数字添加:全文搜索索引类型
FULLTEXT
- 短数字:占用1字节 取值范围是 -128~127
- 模糊搜索字段:建议使用数据类型是:VARCHAR或TEXT
关于应对傻逼面试官的内容
时间类型 datetime
和 timestamp
区别
内存占用:datetime 8字节,timestamp 4字节
展示格式:均是yyyy-mm-dd hh:mm:ss
时区影响:datetime 不受失去影响,而timestamp 存储是以UTC形式,会受到时区影响
存储范围不一样:datetime 是任意时间 ,timestamp是 1970-01-01 08:00:01 - 2038-01-19 11:14:07
特别说明:因为timestamp受到时区影响,如果数据库存储的是起始时间,那么就会导致结果少于1970年,就会报错!
字符串类型 char 与 varchar 区别
内存占用:
(不同编码格式,占用字节数不同,我们就新定义一个字符位,表述字符占用的位数,毕竟内存占用 总空间 =位数 x 此编码格式每字符所占用的字节数)
char是定长,如果你长度定位4,你填写"a" 其他3位填充空字符,也是占用4个字符位
varchar是"a" 会使用2个字符位,浪费一个字符位存储长度,如果"aa" 就会用3个字符位
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤