Проблем с timestam при MySQL
8 отговора
923 прегледа
Проблем с timestam при MySQL
Значи, на хостинг'а дето си хоствам сайта имам следния проблем.
Немога да задам за тип на таблица timestam (8) . Ползвам за администрация PhpMyAdmin. Каквито и атрибути да му задам то винаги си го сетва само на timestam с default 0000-00-00 00:00, и записите вътре са във вид например: 2005-02-21 18:47:25
Аз пък искам типът на колоната да е фиксирано timestam (8) и да се запази във формат например: 20050221.
На моят си компютър нямам проблеми и всичко си е ОК. само на хостинг'а е.
Та, ако някой може да ми помогне ще съм му много благодарен.
Версията на MySQL'a e 4.18
Немога да задам за тип на таблица timestam (8) . Ползвам за администрация PhpMyAdmin. Каквито и атрибути да му задам то винаги си го сетва само на timestam с default 0000-00-00 00:00, и записите вътре са във вид например: 2005-02-21 18:47:25
Аз пък искам типът на колоната да е фиксирано timestam (8) и да се запази във формат например: 20050221.
На моят си компютър нямам проблеми и всичко си е ОК. само на хостинг'а е.
Та, ако някой може да ми помогне ще съм му много благодарен.
Версията на MySQL'a e 4.18
Re: Проблем с timestam при MySQL
Версията съвсем очевидно НЕ Е 4.18 а е 4.1.8
TIMESTAMP се запазва винаги по един и същи начин - като 4 байта.
Във версия 4.0 по подразбиране се представя като YYYYMMDDhhiiss което противоречи на ANSI SQL стандарта и затова в 4.1 е YYYY-MM-DD hh:ii:ss
[линк]
#
Warning: Incompatible change! TIMESTAMP is now returned as a string of type 'YYYY-MM-DD HH:MM:SS' and different timestamp lengths are not supported.
This change was necessary for SQL standards compliance. In a future version, a further change will be made (backward compatible with this change), allowing the timestamp length to indicate the desired number of digits of fractions of a second.
salle.online.bg/sig
TIMESTAMP се запазва винаги по един и същи начин - като 4 байта.
Във версия 4.0 по подразбиране се представя като YYYYMMDDhhiiss което противоречи на ANSI SQL стандарта и затова в 4.1 е YYYY-MM-DD hh:ii:ss
[линк]
#
Warning: Incompatible change! TIMESTAMP is now returned as a string of type 'YYYY-MM-DD HH:MM:SS' and different timestamp lengths are not supported.
This change was necessary for SQL standards compliance. In a future version, a further change will be made (backward compatible with this change), allowing the timestamp length to indicate the desired number of digits of fractions of a second.
salle.online.bg/sig
Re: Проблем с timestam при MySQL
Блягодаря ти за отговора,
да версията е 4.1.8
то излиза, че TIMESTAMP е същото като DATETIME.
ползвах TIMESTAMP за проверка на деня т.е например за днеска:
където today e TIMESTAMP (8)
ще имам ли някакви проблеми ако ползвам LIKE , например
където today вече ще е DITETIME
да версията е 4.1.8
то излиза, че TIMESTAMP е същото като DATETIME.
ползвах TIMESTAMP за проверка на деня т.е например за днеска:
В отговор на:
$today = date("Ymd");
$query = mysql_query("select* form table where today='$today'");
където today e TIMESTAMP (8)
ще имам ли някакви проблеми ако ползвам LIKE , например
В отговор на:
$today = date("Y-m-d");
$query = mysql_query("select* form table where today LIKE \"%$today%\"'");
където today вече ще е DITETIME
Сом таймс шит хепънс ...
В отговор на:$today = date("Ymd");
$query = mysql_query("select* form table where today='$today'");
а защо не
$query = mysql_query("select * form table where DATE_FORMAT('%Y%m%d', NOW())=today");
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: Сом таймс шит хепънс ...
Рошав, твоята заявка, колкото и да е хубава е бавна. Мускл няма да може да ползва никакъв индекс. Неговата е по-добра, защото тогава БД може да се пробва с индекс, ако има подходящ. За съжаление в подобни ситуации може да изникне проблем, ако часовниците на ДБ-то и ПХП-то са разсинхронизирани. Но в общият случай никой не гони супер висока точност :)
Re: Не си прав .. а и аз не съм :)
Заявката на Рошавия може да използва индекс, но пък се съмнявам, че ще върне коректен резултат пре положение, че колонката е TIMESTAMP
salle.online.bg/sig
salle.online.bg/sig
Re: Не си прав .. а и аз не съм :)
На MySQL 3.23.56-nt резултата е чудесен и съвсем точен ;-)
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: Не си прав .. а и аз не съм :)
Значи аз направих една табличка в тиместамп(8), обаче нещо резултатите не са коректни :
mysql> select version();
+------------+
| version() |
+------------+
| 4.1.10-log |
+------------+
mysql> create table t21(txt varchar(20), today timestamp(8));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t21 values ("vchera", now() - interval 24 hour), ("dnes", now()), ("utre", now() + interval 12 hour), ("vdrugiden", now() + interval 38 hour);
Query OK, 4 rows affected (0.04 sec)
mysql> select * from t21 where DATE_FORMAT('%Y%m%d', NOW())=today;
Empty set, 5 warnings (0.02 sec)
mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------+
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119884188' |
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119883132' |
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119883132' |
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119883132' |
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119883132' |
+---------+------+-----------------------------------------------------+
5 rows in set (0.00 sec)
И си прав, че се ползва индекс, миналият път експлеин май ме е излъгал.
mysql> select version();
+------------+
| version() |
+------------+
| 4.1.10-log |
+------------+
mysql> create table t21(txt varchar(20), today timestamp(8));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t21 values ("vchera", now() - interval 24 hour), ("dnes", now()), ("utre", now() + interval 12 hour), ("vdrugiden", now() + interval 38 hour);
Query OK, 4 rows affected (0.04 sec)
mysql> select * from t21 where DATE_FORMAT('%Y%m%d', NOW())=today;
Empty set, 5 warnings (0.02 sec)
mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------+
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119884188' |
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119883132' |
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119883132' |
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119883132' |
| Warning | 1292 | Truncated incorrect datetime value: '%%-1119883132' |
+---------+------+-----------------------------------------------------+
5 rows in set (0.00 sec)
И си прав, че се ползва индекс, миналият път експлеин май ме е излъгал.
Не знам аз бих действал
по следния начин.
От приложението ще си генерирам стрингове по мой вкус и ще питам
select * from t21 where today=20050303
например.
Така де ако наистина timestamp е във формат yyyymmdd
Или ще си форматирам каквото ми трябва по начина който го показва някой от ДБ мениджърите.
Уф незнам дали ще ти свърши работа, знам само че заради една бележка на salle, един куп думи ги написах на български а не на българоанглийски :)
Bеer? Mоre?
Плацебото
От приложението ще си генерирам стрингове по мой вкус и ще питам
select * from t21 where today=20050303
например.
Така де ако наистина timestamp е във формат yyyymmdd
Или ще си форматирам каквото ми трябва по начина който го показва някой от ДБ мениджърите.
Уф незнам дали ще ти свърши работа, знам само че заради една бележка на salle, един куп думи ги написах на български а не на българоанглийски :)
Bеer? Mоre?
Плацебото