Назад | Перейти на главную страницу

Формат даты и времени изменился между MySQL 5.0 и 5.1?

Я обновил подчиненное устройство mysql с mysql 5.0 до mysql 5.1. во время наверстывания произошла ошибка репликации по запросу с неверным значением даты и времени:

110919 13:56:18 [ERROR] Slave SQL: Error 'Incorrect datetime value: '2010-03-14 02:35:34.0' for column 'creation_date' at row 1' on query.

Я попытался повторно вставить запрос, и он снова не удался, затем я установил значение:

2010-03-14 02:35:34

и запрос принят.

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

Я предполагаю, что он был установлен в описании таблицы и был сброшен во время mysql_upgrade.

Mysql 5.1 управляет микросекундами так же, как и mysql 5.0, однако микросекунды не могут быть сохранены в столбце любого временного типа данных. Любая часть микросекунд отбрасывается согласно Mysql Doc: http://dev.mysql.com/doc/refman/5.1/en/datetime.html. Однако, поскольку вы получаете ошибку при этом, вы можете разрешить недопустимые даты, используя настройку режима sql в mysql.

sql-mode=allow_invalid_dates

в my.cnf или my.ini (в зависимости от вашей ОС).

http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_allow_invalid_dates

PS: Удивительно, что дата и время, которые вы указали в своем вопросе, на самом деле не существуют в DST (14 марта 2010 г.) :)

Возможно, вам придется установить datetime_format в my.cnf

Вот что очень и очень необычно. Переменные Формат даты и datetime_format присутствуют в MySQL 5.x:

mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.81-community-log |
+----------------------+
1 row in set (0.00 sec)

mysql> show variables like 'date%format';
+-----------------+-------------------+
| Variable_name   | Value             |
+-----------------+-------------------+
| date_format     | %Y-%m-%d          |
| datetime_format | %Y-%m-%d %H:%i:%s |
+-----------------+-------------------+
2 rows in set (0.00 sec)

Если вы посмотрите их в документации MySQL, там написано, что они не используются. Но, к моему удивлению, вы можете установить их в своем сеансе. Вот как:

mysql> set date_format = '%Y%m%d';
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'date%format';
+-----------------+-------------------+
| Variable_name   | Value             |
+-----------------+-------------------+
| date_format     | %Y%m%d            |
| datetime_format | %Y-%m-%d %H:%i:%s |
+-----------------+-------------------+
2 rows in set (0.00 sec)

Вопрос: Можно ли глобально установить ??? (Этот пример - MySQL 5.5.12 в Windows)

mysql> set global date_format = '%Y%m%d';
ERROR 1238 (HY000): Variable 'date_format' is a read only variable

По крайней мере, в командной строке нельзя. А как насчет my.cnf (my.ini) ???

Я добавил это в my.ini на своем ПК

[mysqld]
date_format="%Y%m%d"

перезапустил mysql и получил следующее:

mysql> select version();
+------------+
| version()  |
+------------+
| 5.5.12-log |
+------------+
1 row in set (0.00 sec)

mysql> show variables like 'date%format';
+-----------------+-------------------+
| Variable_name   | Value             |
+-----------------+-------------------+
| date_format     | %Y%m%d            |
| datetime_format | %Y-%m-%d %H:%i:%s |
+-----------------+-------------------+
2 rows in set (0.00 sec)

Хотя официально это не документировано, вы можете поиграть с форматом по своему усмотрению.

Попробуйте !!!

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: если какие-либо ваши данные datetime будут обнаружены или уничтожены, я откажусь от каких-либо сведений о ваших действиях.