powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / три вопроса про хранение Даты
14 сообщений из 14, страница 1 из 1
три вопроса про хранение Даты
    #38467380
InterSky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) таймзоны в DateTime полях
Вопрос навеян исключительно статями данного форума (например: http://www.sql.ru/forum/311647/datetime-or-int?hl=datetime timestamp)
Всю жизнь хранил даты в datetime полях, и тут вдруг бах, вижу что народ говорит что в них есть косяки, что при переходе с зимнего на летнее время есть проблемы.
Вроде десятки раз менялись зоны, но никогда не видел чтобы в время менялось после перехода с зимнего на летнее.
Актуальная ли это проблема?

2) диапазон timestamp
В документации написано что в timestamp ограниченный диапазон значений - с 1970 по 2038 год
Почему он такой короткий? Ведь поле timestamp - 4 байта!
4 байта = 4 294 967 296 значений
делим на 60 секунд, 60 минут, 24 часа, 366 дней, и получаем что в четырёх байтах мы можем хранить более 135 лет!
Почему тогда в timestamp можно хранить только 68 лет?

3) хранение одновременно и даты создания записи и даты изменения
timestamp даёт возможность отслеживать время создание записи или время изменения.
Почем нельзя иместь сразу два автовычисляемых поля timestamp (чтобы значть и когда поле создалось и когда модифицировалось в последний раз)?
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38467691
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSky,

2, там может быть отрицательное значение, если надо дата раньше 1970
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38467956
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Мало ли кто что говорит... у тебя нет этой проблемы? точную методику её воспроизведения сыскал? а кооли нет - чё дёргаться раньше времени...
3) Не так. Или первого изменения (т.е. создания), или последнего. Два поля - скажем во второе копируешь из первого в триггере after insert.
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38468078
InterSky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artas2, там может быть отрицательное значение, если надо дата раньше 1970
Попробуй выполнить:
UPDATE Table SET PoleTimeStamp='1970-01-01' WHERE id=1
и получишь ошибку!
Incorrect datatime value '1970-01-01' for column 'PoleTimeStamp' at row 1
в это поле можно вносить только значения начиная с 1970-01-01 00:00:01', если мне надо раньше 1970 - то я это поле не могу использовать!


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

Akina3) Не так. Или первого изменения (т.е. создания), или последнего. Два поля - скажем во второе копируешь из первого в триггере after insert.
Ну если создавать тригеры, то можно и вовсе обойтись без функционала полей timestamp, просто текущее время вносишь в нужное поле и всё...
Мой же вопрос: Почему нельзя иместь сразу два автовычисляемых поля timestamp (поставив одному отмечать дату создания, а второму дату изменения записи)?
В чём причина такого ограничения?
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38468144
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSkyИща информацию на этом форуме я дважды наткнулся на упоминание сдешних посетителей об этой проблеме, и ни одного опровержения. По этому и поинтересовался, так как до этого не слышал о такой проблеме (и ссылку на один из топиков на этом форуме указал).
По ссылке НИЧЕГО нет. Кроме абстрактного указания на то, что значение поля типа TIMESTAMP заносится и отдаётся с учётом локальной временнОй зоны. По-моему, вполне нормальное положение вещей. А если кто-то не помнит таких вещей или неспособен учитывать их, и это У НЕГО вызывает проблемы - то это проблемы не типа данных, а программиста.

Ну и вообще:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.10-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create table test(
    -> ts1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    -> ,
    -> ts2 TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
    -> ,
    -> val int
    -> );
Query OK, 0 rows affected (1.13 sec)

mysql> insert into test(val) select 1 union select 2;
Query OK, 2 rows affected (0.08 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into test(val) select 3 union select 4;
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> update test set val=val+2 where mod(val, 2) = 1;
Query OK, 2 rows affected (0.06 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from test;
+---------------------+---------------------+------+
| ts1                 | ts2                 | val  |
+---------------------+---------------------+------+
| 2013-11-18 09:08:38 | 2013-11-18 09:09:42 |    3 |
| 2013-11-18 09:08:38 | 0000-00-00 00:00:00 |    2 |
| 2013-11-18 09:08:49 | 2013-11-18 09:09:42 |    5 |
| 2013-11-18 09:08:49 | 0000-00-00 00:00:00 |    4 |
+---------------------+---------------------+------+
4 rows in set (0.01 sec)

mysql> update test set val=3 where mod(val, 2) = 1;
Query OK, 1 row affected (0.03 sec)
Rows matched: 2  Changed: 1  Warnings: 0

mysql> select * from test;
+---------------------+---------------------+------+
| ts1                 | ts2                 | val  |
+---------------------+---------------------+------+
| 2013-11-18 09:08:38 | 2013-11-18 09:09:42 |    3 |
| 2013-11-18 09:08:38 | 0000-00-00 00:00:00 |    2 |
| 2013-11-18 09:08:49 | 2013-11-18 09:12:33 |    3 |
| 2013-11-18 09:08:49 | 0000-00-00 00:00:00 |    4 |
+---------------------+---------------------+------+
4 rows in set (0.00 sec)


Поле ts1 хранит штамп времени создания записи, поле ts2 либо ноль, либо штамп времени фактического изменения.
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38468510
InterSky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaПоле ts1 хранит штамп времени создания записи, поле ts2 либо ноль, либо штамп времени фактического изменения.
Вообще-то проблема возникает раньше. Уже на стадии:
Код: sql
1.
2.
3.
4.
create table test(
ts1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ts2 TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP,
val int);


Получаем:
MySQL 5.5.8SQL execution error # 1293. Response from the database:
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38468569
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSkyВообще-то проблема возникает раньше. Уже на стадии:
А на 5.6.10 работает. Я для кого консоль цитирую, а?
Обнови версию, и забудь о проблеме.
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38468903
InterSky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА на 5.6.10 работает. Я для кого консоль цитирую, а?
Обнови версию, и забудь о проблеме.
Круто! Хоть что-то пофиксили, а то лет 10 проблема была :)
А есть где-то на русском подробное описание что нового в 5.6 по сравнению с 5.5 ?
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38469473
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только если используются переменные для нумерации - на 5.6.+ работать перестанет))
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38470699
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSkyAkinaА на 5.6.10 работает. Я для кого консоль цитирую, а?
Обнови версию, и забудь о проблеме.
Круто! Хоть что-то пофиксили, а то лет 10 проблема была :)
А есть где-то на русском подробное описание что нового в 5.6 по сравнению с 5.5 ?

:) ну на фоне проблемы была и слабодокументированная возможность

поле 1 - меткавремени без умалчиваемого значения разрешено НУЛЛ
поле 2 - меткавремени по умолчанию текущее при обновлении текущее

но вот хитрость.

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

у меня на том и держаться поля ctime mtime :)
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38472075
InterSky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007только если используются переменные для нумерации - на 5.6.+ работать перестанет))
К сожалению совершенно не понял смысла ваших слов :(
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38472098
InterSky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,

Идея интересная, но не является ли она чисто теоретической?
Потому что когда я создаю таблицу запросом:
Код: sql
1.
2.
3.
4.
CREATE TABLE `tt1` (
  `id` int(11),
  `tt` timestamp NOT NULL
) ENGINE=MyISAM;


и потом смотрю DLL - то вижу что MySQL преобразовал её в:
Код: sql
1.
2.
3.
4.
CREATE TABLE `tt1` (
  `id` int(11) DEFAULT NULL,
  `tt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


и если я пытаюсь создать ещё одно поле с timestamp с условиями - то получаю сообщение о том что два таких поля нельзя:
MySQL 5.5.8SQL execution error # 1293. Response from the database:
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38475510
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSky,

я же написал, у меня так работает.

счас посмотрю каким кодом создавалась база, ибо давно работаю мышкой в кейс средствах проектирования БД
...
Рейтинг: 0 / 0
три вопроса про хранение Даты
    #38475514
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSkyalex564657498765453,

Идея интересная, но не является ли она чисто теоретической?
Потому что когда я создаю таблицу запросом:
Код: sql
1.
2.
3.
4.
CREATE TABLE `tt1` (
  `id` int(11),
  `tt` timestamp NOT NULL
) ENGINE=MyISAM;


и потом смотрю DLL - то вижу что MySQL преобразовал её в:
Код: sql
1.
2.
3.
4.
CREATE TABLE `tt1` (
  `id` int(11) DEFAULT NULL,
  `tt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


и если я пытаюсь создать ещё одно поле с timestamp с условиями - то получаю сообщение о том что два таких поля нельзя:
MySQL 5.5.8SQL execution error # 1293. Response from the database:
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

ёшкин кот, я же написал
пооле для даты создания - без значени по умолчанию РАЗРЕШЕНО НУЛЛ!!!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / три вопроса про хранение Даты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]