У меня есть таблица:
CREATE TABLE [Lines] (
[Value] TEXT NOT NULL,
[AddedOn] TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL
)
Как видите, столбец AddedOn является меткой времени и настроен на запись текущей даты и времени, если она не указана во время вставки.
Пожалуйста, рассмотрите следующий код c #:
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO Lines(Value) VALUES (@Value)";
cmd.Parameters.AddWithValue("@Value", objectValue);
cmd.ExecuteNonQuery();
}
Обратите внимание, что выше я позволяю SQLite назначать дату.Теперь тот же код, за исключением того, что я передаю значение AddedOn (например, DateTime.Now - прямо сейчас)
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO Lines(Value, AddedOn) VALUES (@Value, @AddedOn)";
cmd.Parameters.AddWithValue("@Value", objectValue);
cmd.Parameters.AddWithValue("@AddedOn", DateTime.Now);
cmd.ExecuteNonQuery();
}
Если я тогда сравниваю результаты этих 2 вставок, я обнаруживаю, что когда я позволяю AddedOnпинка по умолчанию (первый пример), она сохранила текущую дату и время по Гринвичу.Когда я передал дату в явном виде (2-й пример), она сохранила текущую дату и время в моем часовом поясе.
Это сделано специально?Это ошибка?Кажется, что поведение должно быть согласованным, а дата и время, которые я передаю, должны быть преобразованы в GMT.