Php MySQL中各种日期/时间字段类型的优缺点是什么?

Php MySQL中各种日期/时间字段类型的优缺点是什么?,php,mysql,datetime,timestamp,lamp,Php,Mysql,Datetime,Timestamp,Lamp,MySQL中的日期和时间可以存储为DATETIME、TIMESTAMP和INTEGER(自1970年1月1日起的秒数)。每种方法的优点和缺点是什么,特别是在灯堆下开发时?我想以下内容有助于澄清 日期和时间可以存储在mysql的DATETIME字段中 如果您希望在创建行时添加时间戳,则使用时间戳-该字段将在创建时自动填充 对日期使用整数有点过分,因为DATETIME基本上就是这样做的,但它会为您完成所有耗时的转换 您是否有兴趣了解mysql中的特定优点或缺点?mysql中的时间戳可能非常棘手。如果

MySQL中的日期和时间可以存储为DATETIME、TIMESTAMP和INTEGER(自1970年1月1日起的秒数)。每种方法的优点和缺点是什么,特别是在灯堆下开发时?

我想以下内容有助于澄清

日期和时间可以存储在mysql的DATETIME字段中

如果您希望在创建行时添加时间戳,则使用时间戳-该字段将在创建时自动填充

对日期使用整数有点过分,因为DATETIME基本上就是这样做的,但它会为您完成所有耗时的转换


您是否有兴趣了解mysql中的特定优点或缺点?

mysql中的时间戳可能非常棘手。如果不小心声明,您可能会得到在每次行更新时自动更改其值的字段(即使您没有显式更新它)


我会使用MySQL中的DATETIME或DATE字段保存数据。至少,如果要存储2038年之前的日期值,请执行以下操作:。如果您所在的系统以不同的方式存储整数,则可能不会出现此问题

比较日期值甚至时间戳仍然很容易

SELECT * FROM myTable WHERE startDate > '2009-01-01'
SELECT * FROM myTable WHERE UNIX_TIMESTAMP(startDate) > 1232541482

如果需要时间戳的毫秒保真度,则需要将其保存为整数。不过要小心,这会使事情复杂化。

  • 时间戳存储在MySQL专有方法中(虽然它基本上只是一个由年、月、日、小时、分钟和秒组成的字符串),此外,每当插入或更改记录时,时间戳类型的字段会自动更新,并且不会给出显式字段值:

    mysql> create table timestamp_test(
        id integer not null auto_increment primary key, 
        val varchar(100) not null default '', ts timestamp not null); 
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into timestamp_test (val) values ('foobar');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from timestamp_test;
    +----+--------+----------------+
    | id | val    | ts             |
    +----+--------+----------------+
    |  1 | foobar | 20090122174108 |
    +----+--------+----------------+
    1 row in set (0.00 sec)
    
    mysql> update timestamp_test set val = 'foo bar' where id = 1;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from timestamp_test;
    +----+---------+----------------+
    | id | val     | ts             |
    +----+---------+----------------+
    |  1 | foo bar | 20090122174123 |
    +----+---------+----------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
  • DATETIME是日期和时间的标准数据类型,与MySQL中的日期和时间函数配合使用。我可能会在实践中使用这个

  • 不建议以整数格式存储日期,因为由于时区、闰年等有趣的问题,您正在打开一个真正的蠕虫罐头-至少如果您打算根据存储在该字段中的特定日期查询数据库

非常感谢您,例如自动更改字段。了解(至少对我来说)是非常重要的。