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
qloog
V2EX  ›  MySQL

大家 mysql 里存时间字段使用整形还是用时间类型?

  •  
  •   qloog · 2020-04-17 14:12:58 +08:00 · 5437 次点击
    这是一个创建于 1687 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如存创建时间使用 int 还是用 datetime 或 timestamp ?

    整形的默认值可以是 0,datetime 或 timestamp 的默认值必须是 0000-00-00 00:00:00

    整形的在程序里面比较起来更容易些,后者可能需要根据语言的具体类型进行比较,感觉不是那么方便。

    大家开发中都是怎么处理的呢?

    23 条回复    2020-04-20 10:39:07 +08:00
    loading
        1
    loading  
       2020-04-17 14:19:22 +08:00 via Android
    如果不存在人工打开数据库修改用 int 存时间戳。
    wysnylc
        2
    wysnylc  
       2020-04-17 14:19:34 +08:00   ❤️ 1
    时间字段包含时区
    如果时间使用整形存,创造时间类型干嘛?
    其他的自己悟
    ragnaroks
        3
    ragnaroks  
       2020-04-17 15:03:38 +08:00
    Int64,操作方便,过滤查询快速,而且时间戳时区无关
    luckyrayyy
        4
    luckyrayyy  
       2020-04-17 15:04:48 +08:00
    时间类型,数据库费劲吧啦的弄出来这个类型 ,肯定也做了很多优化,没特殊需求用他们推荐的最好。
    hooopo
        5
    hooopo  
       2020-04-17 15:08:48 +08:00 via Android
    datetime
    Erroad
        6
    Erroad  
       2020-04-17 15:11:01 +08:00
    都用过,不好说,看具体用途。之前遇到过 timestamp 写入时时区出现 Bug 导致时间出错,后来就谨慎了些
    Kairyuu
        7
    Kairyuu  
       2020-04-17 15:16:00 +08:00
    int
    purensong
        8
    purensong  
       2020-04-17 15:16:38 +08:00
    timestamp
    polythene
        9
    polythene  
       2020-04-17 15:23:54 +08:00
    据我所知,mysql 的时间类型是没有时区的?一个时间存进去,再拿出来,时区信息就丢失了
    wangyzj
        10
    wangyzj  
       2020-04-17 15:27:00 +08:00
    其实我觉得用 int 和 datetime 都可以
    可能更多地是习惯问题

    但是我有一个问题
    就是时间排序或者作为条件查询的时候
    int 和 datetime 有多大区别
    哪个效率更好?
    xpresslink
        11
    xpresslink  
       2020-04-17 15:49:14 +08:00   ❤️ 1
    当性能和存取效率为首要考虑情况下,使用 int64,磁盘占用小,插入检查校验快,索引快。比如上亿条数据要保证插入性能的情况。

    当数据量不大方便性为首要考虑情况下,用时间类型,这样数据库提供的时间函数和转换格式,提取部分等功能就可以很方便,特别是计算两个时间差的时候日期时间类型用 DATEDIFF 很省事。
    1ffree
        12
    1ffree  
       2020-04-17 15:50:54 +08:00
    mysql TimeStamp 类型 CST 时区有个坑
    Felldeadbird
        13
    Felldeadbird  
       2020-04-17 17:57:22 +08:00
    一直用 int 。等到 2038 年出问题,我写的程序还在跑不跑都成问题了。
    passMeBy
        14
    passMeBy  
       2020-04-17 18:02:07 +08:00
    mysql 的 timestamp 能不用就不用,这相当于一个定时炸弹。
    gemini767
        15
    gemini767  
       2020-04-17 18:31:29 +08:00
    正规操作都是 datetime
    qloog
        16
    qloog  
    OP
       2020-04-17 18:32:31 +08:00 via Android
    @gemini767 这个支持时区
    xcstream
        17
    xcstream  
       2020-04-17 18:32:46 +08:00
    如果要在数据库里查询的计算的话 datetime
    如果只是保存和读取的话 int
    qloog
        18
    qloog  
    OP
       2020-04-17 18:33:57 +08:00 via Android
    @xcstream 嗯,还是不建议在数据库里做计算操作
    MeteorCat
        19
    MeteorCat  
       2020-04-17 18:37:39 +08:00 via Android
    我最怕 datetime,因为以前一个项目一堆 default null
    bowser1701
        20
    bowser1701  
       2020-04-17 20:08:06 +08:00 via iPhone
    @1ffree 那就不用 cst 呗。
    daozhihun
        21
    daozhihun  
       2020-04-18 10:15:52 +08:00
    看需求。
    如果数据量不大,或者有一些报表需求的话,用 datetime 比较方便。
    如果只是存一下,例如随便记录一下操作的时间,一般不会去看,那可以用 int
    Aresxue
        22
    Aresxue  
       2020-04-18 13:50:29 +08:00
    有人工查看时间进行数据捞取的操作就 timestamp 和 datetime,时间要求范围不大的话就 timestamp,注意时间一定要给默认值,不然加索引的索引可能会失效,没有人工查看操作直接 int 性能最佳计算也方便
    gemini767
        23
    gemini767  
       2020-04-20 10:39:07 +08:00
    @qloog datetime 不支持时区,如果单库多国家场景的话, 可以统一 utc
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2529 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 01:10 · PVG 09:10 · LAX 17:10 · JFK 20:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.