MySQL永远存储本地时间的日期时间

时间:2016-07-19 04:58:39

标签: mysql datetime

我将照片时间戳存储在MySQL数据库中。目前,我的列设置为:

CREATE TABLE `photos` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `camname` varchar(45) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `time` time DEFAULT NULL,
  PRIMARY KEY (`ID`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

日期和时间表示拍摄照片的当地时间,如图像上打印的时间戳所示。因此,上午10:45将永远,并且应始终是上午10:45,无论我检索或操纵该数据的时区。

这对分析至关重要 - 我们会查看一天中发生的时间。过了多少天等等。知道什么时候发生与当地时间相关的事情是无关紧要的,没用。

那么,在MySQL数据库中存储日期时间数据的最佳方法是什么,因此它始终显示在最初记录的时间内?

相关:Should I use field 'datetime' or 'timestamp'?

我认为答案是:在DATETIME中,你输入的是你得到的。 2015-01-23 12:45:34将始终是2015-01-23 12:45:34而TIMESTAMP将在本地提示上显示不同,DATETIME不会。

然而,根据一些评论的建议,似乎一个好主意包括时区,以便以后有人可以知道DATETIME所指的时区。 (如果他们应该关心)。

3 个答案:

答案 0 :(得分:1)

由于服务器会将所有时间戳转换为服务器时间而您需要本地时间,因此似乎有必要将时区存储在单独的列中。

我建议将时间以UTC和时区存储为整数+/- UTC,以分钟为单位。虽然这需要额外的处理,但它允许您需要以相当一致的方式存储所需的数据。

请注意,您不应将时区存储为VARCHAR(32),例如Asia/Riyadh。这是因为这样做不会考虑夏令时,所以你的时间可能会减少一个小时。

答案 1 :(得分:0)

mysql获取服务器时间戳不是客户端时间戳如果需要存储数据时间取决于您需要在查询中发送数据的客户端时间戳

答案 2 :(得分:0)

使用DATETIME,您输入的内容是:2015-01-23 12:45:34将始终为import {Component, provide} from '@angular/core'; import {bootstrap} from '@angular/platform-browser-dynamic'; import {Observable} from 'rxjs/Observable'; import {DND_PROVIDERS, DND_DIRECTIVES, SortableComponent} from 'ng2-dnd/ng2-dnd'; @Component({ selector: 'app', directives: [DND_DIRECTIVES], providers: [DND_PROVIDERS, provide(SortableComponent {useFactory: () => return new SortableContainer()})], template: ` <div class="container"> <div> <h1 align="center">{{title}}</h1> <div *ngIf="showingListTwo"> <div dnd-sortable-container [dropZones]="['zone1']" [sortableData]="listTwoToDisplay"> <div class="list-bg" style="background:pink;border:1px solid blue" *ngFor="#item of listTwoToDisplay; #i = index" dnd-sortable [sortableIndex]="i"> ID: {{item.id}} <p></p> age: {{item.age}} </div> </div> </div> <div *ngIf="showingListThree"> <div dnd-sortable-container [dropZones]="['zone2']" [sortableData]="listThreeToDisplay"> <div class="list-bg" style="background:yellow;border:1px solid blue" *ngFor="#item of listThreeToDisplay; #i = index" dnd-sortable [sortableIndex]="i"> ID: {{item.id}} <p></p> age: {{item.age}} </div> </div> </div> </div>` }) export class AppComponent { showingListOne = true; showingListTwo = true; showingListThree = true; listOneToDisplay = [ {id:1, name: 'Frank'}, {id:2, name: 'Bill'}, {id:3, name: 'Bob'}, {id:4, name: 'Sue'}, ]; listTwoToDisplay = [ {id:1, age: 13}, {id:2, age: 22}, {id:3, age: 32}, {id:4, age: 19}, ]; listThreeToDisplay = [ {id:1, age: 23}, {id:2, age: 32}, {id:3, age: 34}, {id:4, age: 12}, ]; constructor() { } } bootstrap(AppComponent);

使用TIMESTAMP MySQL记录自纪元(时间点)以来的秒数,并将在本地客户端上以不同方式显示

然而,根据一些评论的建议,似乎一个好主意包括时区,以便以后有人可以知道DATETIME所指的时区。 (如果他们应该关心)。