MySQL CURTIME() всегда 00:00:00
У меня установлен сервер MySQL на Solaris 10u8. До недавнего времени все работало нормально. И вдруг, согласно MySQL, текущее время всегда 00:00:00. CURDATE(), кажется, работает нормально, за исключением того, что время, которое он дает, все еще 00:00:00. У меня есть несколько иллюстраций моей проблемы ниже. Я попытался перезагрузить машину. Я понятия не имею, что делать, и это портит мое веб-приложение. Есть идеи?
-bash-4.1$ Fri Jul 9 11:01:42 EDT 2010
.......
.......
mysql> create table timetest (datetime datetime);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into timetest values (curtime());
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> select * from timetest;
+---------------------+
| datetime |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> insert into timetest values (curdate());
Query OK, 1 row affected (0.00 sec)
mysql> select * from timetest;
+---------------------+
| datetime |
+---------------------+
| 0000-00-00 00:00:00 |
| 2010-07-09 00:00:00 |
+---------------------+
2 rows in set (0.00 sec)
2 ответа
Решение
Вы получаете следующее предупреждение:
+---------+------+-----------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------+
| Warning | 1265 | Data truncated for column 'datetime' at row 1 |
+---------+------+-----------------------------------------------+
Вы можете увидеть это, запустив show warnings;
когда перед выполнением другого запроса при обнаружении предупреждения.
Схема не поддерживает время данных, которые вы пытаетесь вставить. Например:
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 11:18:19 |
+-----------+
1 row in set (0.00 sec)
curdate()
выдает только дату:
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2010-07-09 |
+------------+
1 row in set (0.00 sec)
now()
производит данные в формате, который вы хотите:
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-07-09 11:20:31 |
+---------------------+
1 row in set (0.00 sec)
Увидеть:
mysql> insert into timetest values(now());
Query OK, 1 row affected (0.00 sec)
mysql> select * from timetest;
+---------------------+
| datetime |
+---------------------+
| 0000-00-00 00:00:00 |
| 2010-07-09 11:20:56 |
+---------------------+
2 rows in set (0.00 sec)