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

MySQL 时间存储类型的问题

  •  1
     
  •   syncher · Aug 8, 2017 · 9001 views
    This topic created in 3375 days ago, the information mentioned may be changed or developed.

    如题,MySQL 中时间到底怎么存储最好,datetime、timestamp or int ? 为什么?

    Supplement 1  ·  Aug 8, 2017

    感觉这个问题没有绝对答案,需要根据应用场景,总结一下各位的答案:

    • int

      优点: 存储基本类型,精度高,范围查找快

      缺点: 使用 cursor 分页时很容易出问题;需要转化;

    • timestamp

      优点: 方便时间函数操作

      缺点: 会随时区变化

    • datetime

      优点:方便时间函数操作

    根据各位的建议选 datetime 或者 int 比选 timestamp 方便一些,不知道我理解的对不对。

    29 replies  •  2017-08-09 07:03:33 +08:00
    lol173
    lol173
    Aug 8, 2017
    1
    我做过的大多数项目都是用 int,如果我主导的话,我会用 timestamp
    strict
    strict
    Aug 8, 2017
    2
    你存 int,到时 sqlalchemy 怎么 filter
    siteshen
    siteshen
    Aug 8, 2017
    3
    epoch 用 int 精度不够,使用 cursor 分页时很容易出问题。
    一直用的 timestamp with time zone (postgres)。

    @strict filter 前转成 int

    Query.filter(user.created_at < datetime.now()) # timestamp
    Query.filter(user.created_at < TO_INT(datetime.now())) # int
    syncher
    syncher
    OP
    Aug 8, 2017 via Android
    4
    @siteshen @strict @lol173 感谢回复。timestamp 排序是不是没有 int 快
    moult
    moult
    Aug 8, 2017 via iPhone
    5
    如果存储时间都不用 datetime,那么 MySQL 这个字段类型设计出来干嘛用?
    回归实际的话,看你需求了。脱离需求谈设计愧对扯淡。
    Infernalzero
    Infernalzero
    Aug 8, 2017
    6
    int or bigint
    数据库一般只用最基本类型
    syncher
    syncher
    OP
    Aug 8, 2017
    7
    @moult @Infernalzero 感谢回复,我大概找到答案了,同意 @moult 说的看需求
    https://stackoverflow.com/questions/409286/should-i-use-field-datetime-or-timestamp
    U7Q5tLAex2FI0o0g
    U7Q5tLAex2FI0o0g
    Aug 8, 2017
    8
    一直都用 datetime 或 date
    lshero
    lshero
    Aug 8, 2017 via Android
    9
    更应该考虑是否可能会面临时区转换问题
    syncher
    syncher
    OP
    Aug 8, 2017
    10
    @littleylv 我是想如果用 datetime 是不是不便于查找,我想在该列上建立索引,这样是不是应该用 int?
    LYEHIZRF
    LYEHIZRF
    Aug 8, 2017
    11
    mysql 有很多 date 相关函数可以看看
    LYEHIZRF
    LYEHIZRF
    Aug 8, 2017
    12
    timestamp 会随时区变化
    surfire91
    surfire91
    Aug 8, 2017
    13
    偏向于 timestamp or datetime (看具体需求了),而不是 int or bigint , 因为有很多 date 函数方便使用。
    U7Q5tLAex2FI0o0g
    U7Q5tLAex2FI0o0g
    Aug 8, 2017
    14
    @syncher #10 一般时间字段没必要建索引吧。至于查找,无非就是时间段吧,直接 between
    nullen
    nullen
    Aug 8, 2017
    15
    用 datetime
    lepig
    lepig
    Aug 8, 2017
    16
    @moult 同意。datetime 一个好处就是查库的时候可以直接读取。不然还得复制出来转换一下。
    danielmiao
    danielmiao
    Aug 8, 2017
    17
    bigint,可以支持到 ms,剩下所有的转换都在代码完成,减少数据库运算量
    magicdawn
    magicdawn
    Aug 8, 2017
    18
    datetime 或者 int 都可以, timestamp 随时区变化...不好
    http://magicdawn.ml/2017/05/18/mysql-timezone/
    solomaster
    solomaster
    Aug 8, 2017
    19
    @magicdawn 为什么随时区变化不好?难道不是更方便用户吗?全球各地用户看到都是当地时间。
    loveCoding
    loveCoding
    Aug 8, 2017
    20
    datetime
    bk201
    bk201
    Aug 8, 2017
    21
    @Infernalzero 你时区还要另外存吗
    danielmiao
    danielmiao
    Aug 8, 2017
    22
    @solomaster 第一时区是数据库服务器时区或者是你应用服务器的时区,并不是访问用户的时区,实际使用中出问题的概率远大于方便。试想某一台服务器的时区设置有误。。。在复杂的分布式环境下。。。要多久才能排查到服务器时区的问题。。。。
    zjsxwc
    zjsxwc
    Aug 8, 2017
    23
    我习惯 bigint 存时间戳
    solomaster
    solomaster
    Aug 8, 2017
    24
    @danielmiao 噢噢对,是根据服务器所在地的时区来的。刚才脑子抽了想到另一个问题上去了……
    ngloom
    ngloom
    Aug 8, 2017
    25
    第一份工作里用的是 string 存的时间串,
    跳了以后公司里用的是 datetime,
    后者比前者好太多...
    Infernalzero
    Infernalzero
    Aug 8, 2017❤️1
    26
    @bk201 都存整形了还和时区有啥关系
    gdrk
    gdrk
    Aug 8, 2017 via Android
    27
    @zjsxwc +1 感觉这样也挺好的
    realpg
    realpg
    Aug 9, 2017
    28
    bigint 大法好
    myzyq
    myzyq
    Aug 9, 2017 via Android
    29
    datetime 肯定比 int 有用的多,看你需要这个时间做什么,如果你只是存个时间记录下,datetime 肯定更直观,如果需要一些筛选操作,datetime 的可操作性更高! timestamp 基本没用过!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5499 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 02:02 · PVG 10:02 · LAX 18:02 · JFK 21:02
    ♥ Do have faith in what you're doing.