SQL DATETIME和TIMESTAMP之间的MySQL.Data DateTime.Kind不同

时间:2018-12-07 23:31:26

标签: mysql .net-core mysql-connector

因此,我更新为MySql.Data 8.0.13,并注意到我的TIMESTAMP字段为DateTimeKind.Local,而DATETIME字段为DateTimeKind.Unspecified

我认为“时间戳”将是表示“ CreatedTime”字段的一种很好的语义类型,所以我同意了。

问题是,我通常将这些日期“手动”写在插入查询中,它们是由应用程序(在UTC中)生成的,以确保本地时间及其疯狂的时区/夏时制不会破坏任何内容。我不对它们使用更新或插入。现在,我的应用程序的JSON序列化程序遇到了问题,再次将已经是UTC的时间转换为UTC,这会导致错误的偏移时间。

所以我的问题:

是否有一种方法可以强制执行MySQL.Data以“将那些日期/时间戳视为UTC”?还是最好停止使用TIMESTAMP并坚持使用DATETIME呢? 还是我应该像这样拉一个疯狂的头?

if(databaseValue is DateTime dt) {
     databaseValue = new DateTime(dt.Ticks, DateTimeKind.UTC);
}

哪种方法更适合解决此问题?

1 个答案:

答案 0 :(得分:1)

有一个备用库MySqlConnector,它具有一个DateTimeKind选项,您可以在connection string中指定该选项:

  

MySqlDataReader返回DateTime时使用的DateTimeKind。如果设置   到Utc或Local,如果使用DateTime命令,则将抛出MySqlException   参数分别具有本地类型或Utc类型。