2010-07-13 5 views
2

Когда я выполняю запрос для NOW(), mysql возвращает время, которое отключено примерно на -30 секунд от текущего времени на сервере. Есть идеи? Я попытался просмотреть конфигурационный файл и ничего не нашел. Я бегу версия 5.1.37MYSQL NOW() на 30 секунд

SELECT NOW() 

ответ

5

Контексты часового пояса сервера и контекст, в котором вы получаете дату, почти наверняка имеют другое представление о наличии секунд прыжка. Я подозреваю, что разница будет равна 24, а не 30.

Вы можете проверить это, установив часовой пояс, когда вы получите дату. В разных Unix-ых вы можете использовать префикс «right /» в часовом поясе, чтобы отрегулировать скачок секунд и посмотреть, как это изменит ситуацию.

Чтобы исправить это, вы должны убедиться, что сервер работает с заданной переменной окружения.

Update:

Пропущенный "окна" тег. Время в Windows определяется как UTC, а не TAI, и поэтому включается секундомер. Если разница в действительности равна 24, вам нужно проверить, что mysql не применяет корректировки второго уровня, а также Windows.

2

Вы уверены, что это не займет 30 секунд для вас, чтобы запустить сценарий, а затем проверить время на сервере?

NOW() возвращает постоянное время, что указует время, в котором заявление начало выполнять.

Вам необходимо основывать свое сравнение на инициализации запроса, а не на завершении.

Если вам нужно время по вызову, используйте вместо него SYSDATE().

Если все это в порядке, и у вас все еще есть проблема, вы определенно используете только SELECT NOW()? Если у вас есть дополнение к полю в вашем запросе где-то, это может быть фактически добавление к столбцу NOW() вместо того, который вы считаете.

Если все это по-прежнему проверяется, я думаю, он мог бы заплатить за статью Server Timezone Support MySQL. Может быть, прыжки секунд игнорируются или что-то в этом роде.

Вы перезапустили сервер MySQL на случай, если время сервера было настроено с момента запуска сервера?

+0

Запрос занимает 0,0004 сек, так что это не так, поскольку существует огромное расхождение между тем, когда запрос отправляется и когда он возвращается. Обратите внимание, что SYSDATE() также находится на расстоянии ~ 30 секунд от времени сервера. Редактировать: вызов в точности «ВЫБРАТЬ СЕЙЧАС()» –

+0

@ Слайва, ладно, хорошо, вы попробовали перезапустить сервер mysql? –