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)

Вы должны попробовать сейчас () вместо этого.

Другие вопросы по тегам