在我们程序员做产品实现功能的时候。有一个合理的架构设计,可以避免很多不必要的开发问题、难点,痛点。

所以我推出:“杜绝傻逼设计”口号,我也整理一些我自己开发总结。MySQL字段设选型的笔记!

MySQL多种类型可选类型对比

  1. 整数类型:
    • 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(无符号)。
  2. 浮点数类型:
    • FLOAT:4 字节,单精度浮点数。
    • DOUBLE:8 字节,双精度浮点数。
    • DECIMAL:可变长度,用于存储精确的小数值。
  3. 字符串类型:
    • CHAR:固定长度字符串,最多可存储 255 个字符。
    • VARCHAR:可变长度字符串,最多可存储 65,535 个字符。
    • TEXT:可变长度文本字符串,最多可存储约 65,535 个字符。
  4. 日期和时间类型:
    • 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'。自动进行时区转换。适用于需要记录时间戳的情况,例如数据修改时间、日志时间等。TIMESTAMP 类型在插入或更新记录时会自动更新为当前时间,因此它通常用于跟踪记录的修改时间。(因为时间范围限制,以及可能存在数据类型在where条件查询时,字段类型不一样,进而导致索引失效问题,故时间单位推荐使用 DATETIME
  5. 二进制类型:(一般不建议数据库存储二进制类型
    • 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博客搜索:标题关键字。以获取全部资料 ❤