首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql int和datetime

基础概念

MySQL中的INTDATETIME是两种常用的数据类型。

  • INT:整型数据类型,用于存储整数。它可以是有符号的(默认)或无符号的,范围从-2147483648到2147483647(有符号),或0到4294967295(无符号)。
  • DATETIME:日期和时间数据类型,用于存储日期和时间值。它的范围从1000-01-01 00:00:00到9999-12-31 23:59:59。

相关优势

  • INT
    • 存储空间较小,适合存储整数。
    • 查询速度快,因为整型数据的比较和排序比日期时间数据更快。
  • DATETIME
    • 可以存储精确到秒的日期和时间信息。
    • 支持日期和时间的格式化输出,便于用户阅读和理解。

类型

  • INT
    • 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(无符号)。
  • DATETIME
    • DATE:仅存储日期,范围1000-01-01到9999-12-31。
    • TIME:仅存储时间,范围'-838:59:59'到'838:59:59'。
    • DATETIME:存储日期和时间,范围1000-01-01 00:00:00到9999-12-31 23:59:59。
    • TIMESTAMP:存储日期和时间,范围1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 UTC。

应用场景

  • INT
    • 用户ID、订单号、产品编号等整数标识符。
    • 年龄、评分等整数数据。
  • DATETIME
    • 订单创建时间、用户注册时间等日期和时间信息。
    • 日志记录的时间戳。

常见问题及解决方法

问题1:为什么使用INT存储时间戳?

原因:使用INT存储时间戳可以节省存储空间,并且查询速度较快。

解决方法

代码语言:txt
复制
CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    timestamp INT
);

INSERT INTO example (timestamp) VALUES (UNIX_TIMESTAMP());
SELECT FROM_UNIXTIME(timestamp) AS datetime FROM example;

问题2:为什么使用DATETIME存储日期和时间?

原因:DATETIME类型可以直接存储和显示日期和时间,便于用户阅读和理解。

解决方法

代码语言:txt
复制
CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    datetime DATETIME
);

INSERT INTO example (datetime) VALUES (NOW());
SELECT datetime FROM example;

问题3:如何处理DATETIME的时区问题?

原因:MySQL的DATETIME类型不包含时区信息,可能会导致时区不一致的问题。

解决方法

  • 使用TIMESTAMP类型,它会自动转换为UTC时间存储,并在查询时转换为当前时区。
  • 手动处理时区转换,使用MySQL的时区函数,如CONVERT_TZ()
代码语言:txt
复制
-- 使用TIMESTAMP类型
CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 手动处理时区转换
SELECT CONVERT_TZ(datetime, '+00:00', '+08:00') AS local_datetime FROM example;

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • MYSQL 数据库时间字段 INT,TIMESTAMP,DATETIME 性能效率比较

    原文 | http://1t.click/FAB 在数据库设计的时候,我们经常会需要设计时间字段,在 MYSQL 中,时间字段可以使用 int、timestamp、datetime 三种类型来存储,那么这三种类型哪一种用来存储时间性能比较高...)<600000 查询花费 0.9994 秒 对于 datetime 类型,同样有了索引,反倒不建议使用 MYSQL 内置函数UNIX_TIMESTAMP 查询了。...对于 MyISAM 引擎,建立索引的情况下,效率从高到低:UNIXTIMESTAMP(timestamp) > int > datetime(直接时间比较)>timestamp(直接时间比较)>UNIXTIMESTAMP...对于 InnoDB 引擎,没有索引的情况下(不建议),效率从高到低:int > UNIXTIMESTAMP(timestamp) > datetime(直接时间比较) > timestamp(直接时间比较...对于 InnoDB 引擎,建立索引的情况下,效率从高到低:int > datetime(直接时间比较) > timestamp(直接时间比较)> UNIXTIMESTAMP(timestamp) >

    7K30

    MySQLint (10) int (11) 的区别

    一旦人工设置了 ZEROFILL 属性,MySQL 会自动设置 UNSIGNED 属性(即 ZEROFILL 不能存储负数)。 那取值范围显示宽度到底有什么关系呢?...test_id_2 显示宽度为 4 两字段,接下来插入数据,同时插入 - 128、1 127 这些数值,看看会怎么样。...同理,所以 int (10) int (11) 无任何区别,就是显示宽度不同。...Mysql 可以为整数类型指定宽度,例如 INT (11),对大多数应用这是没有意义的:他不会限制值的合法范围,只是规定了 Mysql 的一些交互工具,如 Mysql 命令行客户端,用来显示字符的个数。...对于存储运算来说, INT (1) INT (8) 是相同的。 是的,设置自动填充的时候用来显示补充0有点 用而已

    1.8K30

    MySQL 保存日期,用哪种数据类型合适?datetime?timestamp?还是 int

    日期算是我们在日常开发中经常用到的数据类型,一般来说一张表都有 createTime updateTime 字段,MySQL 中针对日期也提供了很多种不同的数据类型,如: datetime timestamp...int 等等。...官网的内容: 可以看到,MySQL5.6.4 是一个分水岭: 在 MySQL5.6.4 之前,DATETIME 固定占用 8 个字节。...从 MySQL5.6.4 开始,DATETIME 类型开始支持毫秒,DATETIME(N) 中的 N 表示毫秒的精度,例如,DATETIME(6) 表示可以存储 6 位的毫秒值,那么此时,DATETIME...3. int 字符串费空间,TIMESTAMP DATETIME 如果没有吃透则总感觉乱乱的,所以也有人存时间戳,存一个 int 类型的数值,用一个时间戳来表示时间。

    1.7K20

    MysqlMySQL中 TIMESTAMP类型 DATETIME类型 的区别

    DATETIME:不做任何改变,基本上是原样输入输出 2、两者所能存储的时间范围不一样 timestamp存储的时间范围为:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01...datetime存储的时间范围为:‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。...current_timestamp 来设置更新时自动当前时间 5、timestamp时区相关,存储时以UTC时间保持,查询时转换为当前时区,即如果在东8区的08:00:00分保存的数据,在东9区看到的是09:00:00,datetime...与时区无关 6、timestamp 4个字节存储(实际上就是int),datetime 8个字节 7、如果timestamp的值超出范围,mysql不会报错 8、如果是自动更新模式,手动修改数据导致timestamp...字段更新 9、同时有两个timestamp字段默认值为current_timestamp会报错 参考资料: MySQL中 TIMESTAMP类型 DATETIME类型 的区别 http://www.studyofnet.com

    3.9K20

    MySQLdatetime timestamp 的区别与选择

    MySQL 中常用的两种时间储存类型分别是datetime timestamp。如何在它们之间选择是建表时必要的考虑。下面就谈谈他们的区别怎么选择。...datetime 还需要函数进行转换,但是 timestamp 直接相减就行。...datetime以 8 个字节储存,不会进行时区的检索. 也就是说,对于timestamp来说,如果储存时的时区检索时的时区不一样,那么拿出来的数据也不一样。...对于datetime来说,存什么拿到的就是什么。 还有一个区别就是如果存进去的是NULL,timestamp会自动储存当前时间,而 datetime会储存 NULL。 2 测试 我们新建一个表 ?...查看数据,可以看到存进去的是NULL,timestamp会自动储存当前时间,而 datetime会储存NULL 把时区修改为东 9 区,再查看数据,会会发现 timestamp 比 datetime 多一小时

    18.1K30

    MySQLDATETIME与TIMESTAMP

    “温故而知新” 真理永远都不过时,今天由于工作的事情涉及到了这里,印象中只记得DATETIME类型占用8字节,TIMESTAMP类型占用4字节,心想这么久没有更新的知识万一过时了咋办,毕竟MySQL8都有了...官网这么大,怎么搜,想起来目前在用的是MySQL 5.7版本,那就先查查5.7版本的文档吧。 废话不多说,先把结果拿出来。 v5.6.4版本之前DATETIME占用8字节。...最关键的就是年月的存储方式,有的小伙伴说直接分别存储年月不行吗?...计算速度有了一定的提升;TIMESTAMP使用到2038年1月19号就到终点站了…… 希望大家的项目到那时还存在,我的也是~~ ---- 贴出官网文档: 底层算法结构:https://dev.mysql.com.../5.7/en/date-and-time-type-overview.html 不仅仅是DATETIMETIMESTAMP,还有DATE,TIME,YEAR的介绍。

    2.5K50
    领券