2016-03-13 2 views
2

Создаю в своей личной базе данных MySQL на qnap NAS поле даты с форматом yyyy-mm-dd. Иногда мне нужно указать дату этого поля в форме 1880-00-00. Если я использую приложение qnap phpAdmin для подключения к БД через браузер, я правильно вижу значение 1880-00-00.Странное поведение базы данных

Но если я использую клиент, такой как DBVisualizer, когда я запускаю select на db, в поле данных я вижу 1879-11-30, а не 1880-00-00.

Как я могу получить правильное значение, которое я вставил в базу данных?

+0

Как вы создали свой стол? Есть ли какие-то расчеты на дату? – kojow7

+0

Вы можете создать sqlfiddle, чтобы воссоздать странное поведение? –

ответ

1

1800-00-00 недействительная дата.

MySQL заменяет его действительным значением даты.

Вот объяснение того, как эта работа за кулисами:

1800-00-00 ==> 1799-11-30 -- substract 1 month and 1 day from valid 1800-01-01 
1800-00-01 ==> 1799-12-01 -- substract 1 month from valid 1800-01-01 
1800-01-00 ==> 1799-12-31 -- substract 1 day from valid 1800-01-01 
1800-00-31 ==> 1799-12-31 -- substract 1 day from valid 1800-01-01 
1800-01-01 ==> 1800-01-01 -- substract nothing, it's a valid date 

Если дата, как 1800-00-00 действует для вас, потому что вы не знаете, месяц или день, когда произошло событие, вы должны рассмотрите возможность изменения типа столбца на varchar вместо date, потому что в будущем вы столкнетесь с проблемами - особенно при использовании ODBC. Эти даты будут пустыми, так как они не известны этому интерфейсу.

Конечно, вы должны быть полностью осведомлены о том, что вы отказываетесь от создания SQL-запросов, которые обрабатывают и вычисляют более date типа (конкретные функции), но если ваш случай является «более или менее точной датой», такие запросы не будут " t действительно дает стабильный результат в любом случае.

Смежные вопросы