V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Ufo666
V2EX  ›  MySQL

mysql 数据库存日期一般用什么类型?

  •  
  •   Ufo666 · 2022-07-13 11:27:12 +08:00 · 4200 次点击
    这是一个创建于 891 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我之前用的 date ,但是在做日期减法,或者前端传来的范围时间查找,总是要去转换成时间戳,然后再转换成 date 类型,然后才能查询,所以我在想能不能直接存 int 类型的时间戳会比较好。

    27 条回复    2022-08-16 17:03:04 +08:00
    wunonglin
        1
    wunonglin  
       2022-07-13 11:29:55 +08:00
    我都存时间戳
    sgq1128
        2
    sgq1128  
       2022-07-13 11:32:16 +08:00
    date ,更直观一点
    sunjiayao
        3
    sunjiayao  
       2022-07-13 11:34:20 +08:00
    时间范围查询直接给 mysql 传字符串也可以查
    bruce0
        4
    bruce0  
       2022-07-13 11:34:58 +08:00
    我一般都是用 bigint, 存时间戳, 好处是可以随便比较和计算时间, 不好的地方就是直接看表不知道时间,需要手动计算
    yousabuk
        5
    yousabuk  
       2022-07-13 11:38:08 +08:00 via iPhone
    @bruce0 这个再增加一列就很好了
    Ufo666
        6
    Ufo666  
    OP
       2022-07-13 11:39:49 +08:00
    @wunonglin 时间戳用 int 还是 timestamp
    sunjiayao
        7
    sunjiayao  
       2022-07-13 11:42:02 +08:00
    计算时间可以用 date_add
    c1273082756
        8
    c1273082756  
       2022-07-13 11:43:31 +08:00
    时间戳和 date 都存就完美解决
    lix7
        9
    lix7  
       2022-07-13 11:43:39 +08:00
    永远只存 bigint
    wunonglin
        10
    wunonglin  
       2022-07-13 11:44:54 +08:00
    @Ufo666 #6 bigint
    R18
        11
    R18  
       2022-07-13 11:45:50 +08:00
    unsigned int
    bruce0
        12
    bruce0  
       2022-07-13 11:47:08 +08:00
    @yousabuk 虽然可以 但是感觉有点冗余, 真的要看的话,手动复制找个工具转一下,或者查询的的时候用 sql 函数转一下
    R18
        13
    R18  
       2022-07-13 11:47:27 +08:00
    时区真的很麻烦, 数据库有时区,程序有时区,系统还有时区。如果不存时间戳,改个时区牵扯的问题太多了。
    Rache1
        14
    Rache1  
       2022-07-13 12:41:09 +08:00
    考虑时区就是用 timestamp ,或者 int 、bigint 。

    如果要考虑时区,大于 1970 ,同时要考虑超过 2038 的时间,但小于 2106 ,可以考虑无符号的 int 、如果要超过 2106 年,就要考虑 bigint 了。

    1970 以前的时间,也得考虑 date 、datetime 了(不考虑时区的)
    wbrobot
        15
    wbrobot  
       2022-07-13 12:43:54 +08:00
    使用 datetime ,存储逻辑还是 timestamp->int, 可以 SQL 里面写 date 字符串直接比较
    cnoder
        16
    cnoder  
       2022-07-13 12:45:56 +08:00
    没有跨时区业务就 datetime,有就时间戳
    TAFMT
        17
    TAFMT  
       2022-07-13 13:46:03 +08:00
    datetime
    keppelfei
        18
    keppelfei  
       2022-07-13 13:48:27 +08:00
    @bruce0 有没有什么软件可以自动转一下?反正都是函数计算,如果有软件支持自动转化,那就美了。
    hingbong
        19
    hingbong  
       2022-07-13 14:23:46 +08:00
    TIMESTAMP 就行, 反正互联网项目也活不到 2038 年
    wtfedc
        20
    wtfedc  
       2022-07-13 14:25:09 +08:00
    datetime 和 timestamp 直接比较会有什么问题吗?为什么要转时间戳再比较
    mmdsun
        21
    mmdsun  
       2022-07-13 18:34:26 +08:00 via iPhone
    数据库:datetime
    Java 代码:LocalDateTime ( Java8 新日期类)

    有时区也没事,注解或者 config 可以自己转,spring boot 项目
    ragnaroks
        22
    ragnaroks  
       2022-07-13 20:12:13 +08:00
    int64 时间戳唯一选择,不要给自己找麻烦
    liaohongxing
        23
    liaohongxing  
       2022-07-13 22:12:02 +08:00
    写 php 我喜欢 int 存, 写 go 我喜欢 datetime 3 位精度带毫秒
    fox0001
        24
    fox0001  
       2022-07-13 22:15:19 +08:00
    datetime 类型,保存 UTC 时区的时间
    liudengchn
        25
    liudengchn  
       2022-07-13 23:16:09 +08:00
    datetime
    Ufo666
        26
    Ufo666  
    OP
       2022-07-15 10:39:25 +08:00
    谢谢大家,已经采取 bigint 了
    nosoxo
        27
    nosoxo  
       2022-08-16 17:03:04 +08:00
    @c1273082756 天才
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1357 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:27 · PVG 01:27 · LAX 09:27 · JFK 12:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.