Подтвердить что ты не робот

Странное предупреждение MySQL 1264 для действительного значения DateTime

Я вручную (GASP!) ввел команду MySQL в командной строке, и я получил предупреждение, которое я даже не могу понять. (И прежде чем кто-нибудь что-нибудь скажет, да, я ЗНАЮ: 1. Использование интерфейса командной строки не самый лучший подход; 2. Моя таблица НЕ называется "TABLE_NAME", а мой столбец НЕ называется "DateColumn", а мое значение RecordID НЕ действительно "1234"; 3. Может быть, мой тип столбца должен быть TIMESTAMP, но пока нет. Перемещение....)

Попытка ввести значение для даты "26 июля 2012 года в 2:27 PM (GMT)", я нажал:

mysql> update TABLE_NAME set DateColumn="2012-07-26 14:27:00" where RecordID="1234";

Я получил:

Query OK, 1 row affected, 1 warning (0.11 sec) 
Rows matched: 1  Changed: 1  Warnings: 1

Итак, я нажал:

mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level   | Code | Message                                             |
+---------+------+-----------------------------------------------------+
| Warning | 1264 | Out of range value for column 'DateColumn' at row 1 |
+---------+------+-----------------------------------------------------+

Странно, подумал я. Поэтому я сначала проверил таблицу, чтобы подтвердить тип столбца (поля):

mysql> describe TABLE_NAME;

+------------+----------+------+-----+-------------------+-------+
| Field      | Type     | Null | Key | Default           | Extra |
| DateColumn | datetime | YES  |     | NULL              |       |
+------------+----------+------+-----+-------------------+-------+

НО значение ДОЛЖНО правильно записываться в базу данных, а не усекать, AFAIK:

mysql> select * from TABLE_NAME where RecordID="1234";

+-----------------------------------------------+
| RecordID | Date_Column         | BlahBlahBlah |
+----------+---------------------+--------------+
|     1234 | 2012-07-26 14:27:00 | something..  | 
+----------+---------------------+--------------+

Я уже искал StackOverflow.com для решения. Я уже искал объяснения. Я уже читал в http://dev.mysql.com/doc/refman/5.5/en/datetime.html, где говорится:

    MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. 

У меня даже было небольшое подозрение, что это имело какое-то отношение к дате или времени, когда я делал запись; поэтому я укажу, что сервер, на котором находится база данных, находится в Pacific Daylight Time (GMT-8, за исключением прямо сейчас GMT-7 для DST); Я зарегистрирован (SSH) от клиента по EDT (что не имеет значения); и я сохраняю все значения Date_Column как GMT. В то время, когда я входил в значение "2012-07-26 14:27:00", все три даты были хорошо ПОСЛЕ того, что 30/30/12. Не то чтобы это имело значение - я мог бы входить в будущие даты, не получая ошибки, - но думал, что это может быть полезно для вас. Итак -

ПОЧЕМУ, OH ПОЧЕМУ "2012-07-26 14:27:00" значение вне диапазона?

Моя версия клиентского API для MySQL - это 5.1.49.

Это первый раз, когда я когда-либо писал в StackOverflow. Заранее благодарю вас за ваши предложения.

4b9b3361

Ответ 1

Интересно, преобразует ли он его в какой-то формат даты из строки. Этот формат даты тогда имел бы слишком большую точность, которая была бы усечена. Попробуйте перевести его в datetime перед назначением.