SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.05.2009 14:01:54

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

Здраствуйте, есть запрос:

DELETE FROM `online` WHERE `time` < NOW() - INTERVAL 12 MINUTE


тип поля time = DATETIME
табличка = InnoDB

Он должен удалить всех пользователей которые не активны более 12 минут, однако он удаляет ВСЕ записи ВСЕХ пользователей =\
Почему? Что не так? HELP!!!

Отредактированно Proger (03.05.2009 14:04:46)

Неактивен

 

#2 03.05.2009 14:26:25

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

Посмотрите внимательно что именно хранится в таблице (и в какой временной зоне) и сравните с now(). Лучше бы подошел тип TIMESTAMP, так как он совместим с now() по временной зоне.

Неактивен

 

#3 03.05.2009 16:28:40

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

Гм. Временная зона на всех серверах GTM+3 то есть московское время.
Попробую timestamp, мне эта дата на вывод как бы и не нужна, она сугобо для того чтобы знать как долго пользователь неактивен находясь на сайте.
Спасибо!

Неактивен

 

#4 03.05.2009 17:31:33

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

timestamp не помог =// Такой же эффект и дата таже самая, как и была раньше, когда её вставлял php скрипт в БД. Какие ещё могут быть варианты?
Я вот не знаю Debian сам часовой пояс выбирает из интернета или нет (доступ в интернет имеется). И как его бы просмотреть, может он не верный. Но время точно верное.

ADD:
сделал SELECT NOW()
получил время на 4 часа больше, видимо часовой пояс как гринвич стоит. А где это можно исправить?

Отредактированно Proger (03.05.2009 17:33:14)

Неактивен

 

#5 03.05.2009 18:00:06

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

MySQL по умолчанию использует зону из системы. Но можно выставить для каждого клиента запросом
SET time_zone = '+4:00'  (но это будет работать до ближайшей смены летнего времени)
http://dev.mysql.com/doc/refman/5.1/en/ … pport.html

Лучше разобраться почему в базу время попадает в разном формате: при вставке оно по гринвичу, а при сравнении - по Московскому.

Неактивен

 

#6 03.05.2009 18:08:22

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

Пока сменил просто сменив системную дату. Ибо он РЕАЛЬНУЮ почему то считает за гринвич.
Через tzconfig я проверил, стоит европа/москва, но время которое в bios он считает почему то за гринвич. Сменил на 4 часа назад - все нормально =/

Неактивен

 

#7 04.05.2009 21:44:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

Он наверняка в SELECT NOW() ставит Гринвич. У Вас система считает, что она в Лондоне smile

Неактивен

 

#8 23.05.2009 19:33:22

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

система при установке спросила "какой пояс?" Я ей указал Москву ГТМ+3. Однако в now... ИМХО масикуэль что-то не понимает с временными зонами.

Отредактированно Proger (23.05.2009 19:41:27)

Неактивен

 

#9 24.05.2009 02:06:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

Прочитал изначальную проблему. Кажется, можно плюнуть на все это и хранить данные в
TIMESTAMP. Тогда Вы не будете привязаны к определенной зоне, и проблемы отпадут
сами собой.

Кстати, MySQL тут не при чем, зона важна та, которую сообщает клиент smile

Неактивен

 

#10 25.05.2009 10:30:02

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

все сервера в одной зоне.
Данные и так уже в таймштампе - не помогло. Я же написал что отмотал просто на 4 часа назад. Просто не понимаю почему так и не хочу мучатся с переводом часов после лета например...

Неактивен

 

#11 25.05.2009 19:52:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

Еще раз говорю, это клиентская настройка, а не серверная. Смотрите в настройки, которые
посылает клиент серверу.

Код:

[aquatica] root (none) > select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-25 19:45:23 | 
+---------------------+
1 row in set (0,01 sec)

[aquatica] root (none) > set time_zone='+0:0';
Query OK, 0 rows affected (0,02 sec)

[aquatica] root (none) > select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-25 15:50:16 | 
+---------------------+
1 row in set (0,00 sec)

Можете проставить на сервер именные зоны (скрипт mysql_tzinfo_to_sql) и после этого можно
будет после подключения писать SET time_zone='Europe/Moscow' и все timestamp будут отдаваться
в нужной зоне.

Неактивен

 

#12 26.05.2009 04:42:05

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

хм... ну видимо оттого что у меня время руками на 4 часа повернуто оба запроса до смены временной зоны и после одинаковое время показали.

А что в данном случае клиент то? Постоянно в запуске скриптов прописывать set time +3 ? Клиентом тут является как я понимаю сам php движок, а где там такие настройки можно найти я не понял! Я первым делом искал различные настройки часовых поясов, но ничего не нашел.

Неактивен

 

#13 26.05.2009 16:19:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Запрос странно работает (`time` < NOW() - INTERVAL 12 MINUTE)

Если это PHP, то да, это библиотека PHP.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson