DateTime.MaxValue сохраняет как ноль в MySQL - PullRequest
0 голосов
/ 18 октября 2018

Я использую C # и MySql.У меня есть требование, где мне нужно сохранить DateTime.MaxValue в один из столбцов.

Код ADO.NET дает мне значение ниже DateTime.MaxValue

12/31/9999 11:59:59 PM

Когда я сохраняюэто в MySQL, я вижу, что значение для этого столбца datetime (3) сохраняется как:

0000-00-00 00: 00: 00.000

Пример ADOКод .NET

DateTime time = DateTime.MaxValue;

sqlCommand.Parameters.AddWithValue("Expires", time);
sqlCommand.ExecuteNonQuery();

Тип данных столбца: datetime (3)

Я до сих пор не могу понять, почему DateTime.MaxValue сохраняется как 0000-00-00 00:00: 00.000

Есть мысли по этому поводу?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018
В столбце

A DATETIME могут храниться значения от до '9999-12-31 23:59:59'.DateTime.MaxValue на самом деле 9999-12-31 23:59:59.9999999.Когда вы пытаетесь вставить его, доли секунды превышают максимальный размер поля.

Обычно (в режиме STRICT) MySQL Server выдаст ошибку datetime field overflow.Но если ваш сервер работает в режиме ANSI, переполнение автоматически преобразуется в «недопустимое» значение даты и времени 0000-00-00.

Один из способов решения этой проблемы - использование режима STRICTв вашем MySQL сервере.

Другой способ - указать тип столбца как DATETIME(6), что позволяет хранить дробные секунды.

Третий способ - усекать дробные секунды из вашегоDateTime объекты в C # перед вставкой их в базу данных.

0 голосов
/ 18 октября 2018

Может быть, какой-то триггер мешает сохранить такую ​​высокую дату в вашем столбце?Вы пытались вставить эту дату из запроса SQL?Я провел несколько тестов в Oracle DB, и все прошло гладко.Это не должно быть иначе в MySQL ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...