Mysql中的数据类型设计

MySQL 8中支持多种数据类型,每种数据类型都有其特定的用途和设计策略。在设计数据库时,需要根据实际需求选择合适的数据类型。

数据类型

对于数据类型而言,其实大同小异,你要知道数据存到数据库,它的上游是程序,所以程序里面会有哪些数据类型呢!当然也别一次性去记每种数据类型的大小,但是必须要知道支持哪几种数据类型。

  • 整数类型:
  • TINYINT:1字节,范围-128到127(有符号)或0到255(无符号)
  • SMALLINT:2字节,范围-32768到32767(有符号)或0到65535(无符号)
  • MEDIUMINT:3字节,范围-8388608到8388607(有符号)或0到16777215(无符号)
  • INT:4字节,范围-2147483648到2147483647(有符号)或0到4294967295(无符号)
  • BIGINT:8字节,范围-9223372036854775808到9223372036854775807(有符号)或0到18446744073709551615(无符号)
  • 浮点数类型:
  • FLOAT:4字节,单精度浮点数,可以指定精度
  • DOUBLE:8字节,双精度浮点数,可以指定精度
  • 定点数类型:
  • DECIMAL:可变长度,高精度小数,可以指定精度和小数位数,适合于货币、金融等场景
  • 日期和时间类型:
  • DATE:日期,格式为’YYYY-MM-DD’
  • TIME:时间,格式为’HH:MM:SS’
  • DATETIME:日期和时间,格式为’YYYY-MM-DD HH:MM:SS’
  • TIMESTAMP:自动记录创建或修改的日期和时间,格式为’YYYY-MM-DD HH:MM:SS’
  • 字符串类型:
  • CHAR:固定长度字符串,最多255个字符
  • VARCHAR:可变长度字符串,最多65535个字符
  • TEXT:可变长度文本字符串,最多65535个字符
  • 二进制类型:
  • BINARY:固定长度二进制数据,最多255个字节
  • VARBINARY:可变长度二进制数据,最多65535个字节
  • BLOB:可变长度二进制大对象,最多65535个字节
  • 枚举类型和集合类型:
  • ENUM:枚举类型,可从预定义的值列表中选择
  • SET:集合类型,可从预定义的值列表中选择多个值

以上只是平时用的比较多的类型,其实还有像 JSON、UUID 这些就不一一列举了。

TIMESTAMP受服务器时区设置影响,会根据时区再次转换后存入

timestamp的允许时间范围只能到2038年

数据类型设计过程

  • 根据存储的数据范围选择合适的整数类型,避免使用过大或过小的整数类型浪费存储空间。
  • UNSIGNED属性:如果数据不需要负数,可以考虑使用无符号整数类型,可以将整数的范围翻倍。
  • 根据精度和存储范围选择合适的浮点数类型。注意浮点数类型会存在精度问题,不适合用于精确计算。
  • 适用于对精度要求较高的金融、货币等场景,能够精确表示指定位数的小数。
  • 根据实际需要选择合适的日期和时间类型。TIMESTAMP在MySQL 8中有特殊的自动更新属性,适合表示记录的创建时间或修改时间,趁它还能用就赶紧用吧。
  • 根据实际存储的数据长度选择定长或不定长的字符串类型。
  • 对于较长的文本字段可以考虑使用TEXT类型,但是尽量少用。
  • 尽量使用占用空间最小的数据类型,减少存储空间的占用,并提高查询效率。
  • 避免过度使用TEXT/BLOB类型:TEXT和BLOB类型属于大对象类型,不适合频繁的查询和索引,尽量避免过度使用。