Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 12:57 19.05.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Тема DATE() in MySQL 5.0.45  
Автор mr.vain (пътник 57)
Публикувано03.08.07 16:34



Здравейте отново!

Не съм сигурен дали въпроса ми е коректен, но имам следния странен проблем. При прилагане на DATE() върху TIMESTAMP колона, например:

WHERE DATE(updateDate) = '2007-07-28'

MySQL-a не връща нищо...!
Ако в заявката използвам DATE_FORMAT, т.е.:

WHERE DATE_DORMAT(updateDate,'%Y-%m-%d') = '2007-07-28'

всичко е ОК.

Доскоро бях с 5.0.37 където всичко беше наред. По препоръка на вещите лица преминах на 5.0.45 където се появи този проблем... Има ли някаква несъвместимост между версиите или проблема е в мен (въпреки, че единствената промяна е във версиите, всичко друго е идентично).

Благодаря ви предватително!

Има три вида хора. Част от проблема, част от решението и част от пейзажа.

Редактирано от mr.vain на 03.08.07 16:35.



Тема Re: DATE() in MySQL 5.0.45нови [re: mr.vain]  
Автор wqw (АзСъмЖив)
Публикувано03.08.07 17:05



Canonical ODBC формат работи ли? i.e. '20070728'

cheers,
</wqw>




Тема Re: DATE() in MySQL 5.0.45нови [re: mr.vain]  
Автор jgmec (непознат )
Публикувано09.08.07 00:21



А защо не опиташ да смениш типа на колоната - така както си го написал, ако има повечко редове в таблицата ще падне голямо смятане.



Тема Re: DATE() in MySQL 5.0.45нови [re: mr.vain]  
Автор mcdev (непознат )
Публикувано09.08.07 10:21



Здрасти, приятелче!

Ще се опитам да помогна. Първо, за това което казваш имам единствено обяснение, но нека първо видим при мен как е.

mysql> describe tstest;
+-------+-----------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-------+
| ts | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+-------+-----------+------+-----+-------------------+-------+
1 row in set (0.00 sec)

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

mysql> select * from tstest WHERE DATE(ts) = '2007-07-28';
+---------------------+
| ts |
+---------------------+
| 2007-07-28 12:23:00 |
+---------------------+
1 row in set (0.01 sec)

Както виждаш, става.
Единственото, което ми хрумва в твоя случай е, че time zone на сървъра се е променила. TIMESTAMP колонките се пазят в UTC като 4 байта и при връщане се смятат спрямо зоната на сесията. Ето, виж в моя случай какво би се получило:

mysql> update tstest set ts = '2007-07-28 00:00:00';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select @@session.time_zone;
+---------------------+
| @@session.time_zone |
+---------------------+
| SYSTEM |
+---------------------+
1 row in set (0.00 sec)

mysql> set @@session.time_zone='+00:00';
Query OK, 0 rows affected (0.06 sec)

mysql> select * from tstest WHERE DATE(ts) = '2007-07-28';
Empty set (0.00 sec)

mysql> set @@session.time_zone='SYSTEM';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from tstest WHERE DATE(ts) = '2007-07-28';
+---------------------+
| ts |
+---------------------+
| 2007-07-28 00:00:00 |
+---------------------+
1 row in set (0.00 sec)

Това, че си решил да търсиш така по timestamp обаче, е много лошо решение. Води до изчисления за ВСЕКИ ред, освен това би предодвратило използването на индекси по колонката ти (ако има такива), което при големи таблици е сериозен удар по производителността.

Препоръчвам ти да ползваш нещо от сорта:
WHERE ts >= '2007-07-08 00:00:00' and ts =< '2007-07-08 23:59'
Което би довело до range scan, което е доста по-бързо, особено при таблици от тип InnoDB.

Дано съм бил полезен!
Поздрави!



Тема Re: DATE() in MySQL 5.0.45нови [re: mcdev]  
Автор mr.vain (пътник 57)
Публикувано24.08.07 08:44



Привет!

Оказа се, че има бъг с DATE() функцията от 5.0.42 нагоре (включително и в 0.45):

http://bugs.mysql.com/bug.php?id=29898

Така или иначе благодаря за съветите, ще се възползвам! :)

Има три вида хора. Част от проблема, част от решението и част от пейзажа.



Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.