MySQL.Data DateTime.Kind SQL DATETIME 和 TIMESTAMP 不同
MySQL.Data DateTime.Kind being different between SQL DATETIME and TIMESTAMP
所以我更新到 MySql.Data 8.0.13
并且我注意到我的 TIMESTAMP
字段显示为 DateTimeKind.Local
而 DATETIME
字段被读取为 DateTimeKind.Unspecified
我认为 "Timestamp" 是一个很好的语义类型来表示 "CreatedTime" 字段,所以我选择了它。
问题是,我通常在插入查询中写这些日期 "manually",它们是由应用程序生成的,采用 UTC 格式,以确保本地时间和它们疯狂的 timezones/daylight 节省不会破坏任何东西。我不对它们使用 on-update 或 on-insert。现在我遇到了应用程序的 JSON 序列化程序将已经 UTC 时间再次转换为 UTC 的问题,这会导致错误的偏移时间。
所以我的问题是:
有没有办法将 MySQL.Data 强制执行到 "Consider those dates/timestamps as being UTC"?还是我最好停止使用 TIMESTAMP
并坚持使用 DATETIME
?
还是我应该像这样搞个疯狂的噱头?
if(databaseValue is DateTime dt) {
databaseValue = new DateTime(dt.Ticks, DateTimeKind.UTC);
}
哪种方法更适合解决这个问题?
有一个替代库MySqlConnector which has a DateTimeKind
option you can specify in the connection string:
The DateTimeKind used when MySqlDataReader returns a DateTime. If set
to Utc or Local, a MySqlException will be thrown if a DateTime command
parameter has a Kind of Local or Utc, respectively.
所以我更新到 MySql.Data 8.0.13
并且我注意到我的 TIMESTAMP
字段显示为 DateTimeKind.Local
而 DATETIME
字段被读取为 DateTimeKind.Unspecified
我认为 "Timestamp" 是一个很好的语义类型来表示 "CreatedTime" 字段,所以我选择了它。
问题是,我通常在插入查询中写这些日期 "manually",它们是由应用程序生成的,采用 UTC 格式,以确保本地时间和它们疯狂的 timezones/daylight 节省不会破坏任何东西。我不对它们使用 on-update 或 on-insert。现在我遇到了应用程序的 JSON 序列化程序将已经 UTC 时间再次转换为 UTC 的问题,这会导致错误的偏移时间。
所以我的问题是:
有没有办法将 MySQL.Data 强制执行到 "Consider those dates/timestamps as being UTC"?还是我最好停止使用 TIMESTAMP
并坚持使用 DATETIME
?
还是我应该像这样搞个疯狂的噱头?
if(databaseValue is DateTime dt) {
databaseValue = new DateTime(dt.Ticks, DateTimeKind.UTC);
}
哪种方法更适合解决这个问题?
有一个替代库MySqlConnector which has a DateTimeKind
option you can specify in the connection string:
The DateTimeKind used when MySqlDataReader returns a DateTime. If set to Utc or Local, a MySqlException will be thrown if a DateTime command parameter has a Kind of Local or Utc, respectively.