MySQL开发技巧

数值类型的范围

时间类型的范围

  1. timestamp类型是当前时间到 Unix元年(1970 年 1 月 1 日 0 时 0 分 0 秒)的秒数,占用4个字节,以UTC的格式储存,它会自动检索当前时区并进行转换。datetime以8个字节储存,不会进行时区的检索。
  2. 对于timestamp来说,如果储存时的时区和检索时的时区不一样,那么拿出来的数据也不一样。对于datetime来说,存什么拿到的就是什么。
  3. 根据存储范围来选取,比如生产时间,保质期等时间建议选取datetime,因为datetime能存储的范围更广。
  4. 记录数据的插入时间和修改时间建议使用timestamp。
  5. 和时区相关的时间字段选用timestamp。
  6. 如果只是想表示年、日期、时间的还可以使用 year、 date、 time,它们分别占据 1、3、3 字节,而datetime就是它们的集合。
  7. 如果timestamp字段经常用于查询,还可以使用MySQL内置的函数FROM_UNIXTIME()、UNIX_TIMESTAMP(),将日期和时间戳数字来回转换,转换后可以用 INT UNSIGNED 存储时间,数字是连续的,占用空间更小,并且可以使用索引提升查询性能。

IP类型

  1. IP值一般使用char或varchar进行存储,但是当进行查找和统计时,字符类型不是很高效。
  2. MySQL数据库内置了两个IP相关的函数INET_ATON()、INET_NTOA(),可以实现 IP 地址和整数类型的转换。转换后使用可以INT UNSIGNED 来存储IP,转换后的数字是连续的,提高了查询性能,占用空间更小。