如何在MySQLConnector / Net中更改与连接关联的时区的更改?

时间:2015-04-21 01:46:15

标签: c# mysql mysql-connector

我正在尝试从已经是UTC的Unix时间戳插入MySQL表。使用from_unixtime(timestamp)可以解析,但它使用的时区是“当前时区”,这显然是连接的当前时区,而不是mysql服务器本身。

有没有办法可以更改连接的时区?我尝试在插入之前加入SET time_zone="+00:00";,但这并没有改变任何东西。我在connection string options中也没有看到任何内容。

我意识到我可以做CONVERT_TZ(FROM_UNIXTIME(timestamp), @@session.time_zone, '+00:00')之类的事情,但如果可以的话,我宁愿避免所有无意义的转换,尤其是from_unixtime docs警告说转换可能不是无损的。

如果有任何不同,我正在使用MySQLConnector / Net 6.9.6。

1 个答案:

答案 0 :(得分:0)

原来问题是我自己造成的。 DateTimeOffset.Date返回没有偏移的DateTime 。糟糕。

如果有人有类似的奇怪问题,这里有一些非常有用的东西,同时试图弄清楚连接器是什么:

Enabling MySQL tracing

在连接对象内部进行root操作,以查看它对时区的看法:

object driver = conn.GetType().GetField("driver", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(conn);
object tzOffset = driver.GetType().GetField("timeZoneOffset", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(driver);

使用SQL检查区域偏移:

TimeSpan? timediff = new MySqlCommand("SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP())", conn).ExecuteScalar() as TimeSpan?;
DateTime? nullable = new MySqlCommand("SELECT NOW()", conn).ExecuteScalar() as DateTime?;