Як використовувати MySQL: timestamp і datetime

12 0 Новини високих технологій

MySQL надає розробникові можливість працювати з часом різним чином. Є типи даних для опису полів в таблицях. Пропонується безліч функцій для застосування у запитах. Доступна тимчасова локалізація і зміна часових поясів у сесіях, налаштування MySQL і використання часу операційної системи.

Як використовувати MySQL: timestamp і datetime
Відповідальність за застосування типів даних і зміну часових поясів лежить на розробнику, який повинен враховувати час клієнта і час сервера. Вони не завжди збігаються.

Опис таблиць з полями часу

У прикладі наведено три варіанти подання часу. Два - типу MySQL timestamp (start_timestamp, next_timestamp), одна - типу MySQL datetime (start_datetime) і інтерфейс варіант у вигляді рядка символів (work_income).


Як використовувати MySQL: timestamp і datetime
Тип timestamp - це рідний для MySQL формат часу фіксації подій, займає 8 байт, є цілим числом та має одну особливість: перша колонка заповнюється автоматом в момент створення: запит (1). Друга та всі наступні - залишаються нульовими, але це не NULL. Запит (2) містить функцію MySQL timestamp now(), застосовану для заповнення поля start_datetime.
Як використовувати MySQL: timestamp і datetime
В цьому прикладі видно, що таблиця, сформована запитом (1 створення таблиці) буде заповнювати автоматом першу колонку start_timestamp при створенні таблиці. Запит (2 заповнення таблиці) показує, що це саме так. При цьому друга колонка next_timestamp залишається нульовий: усі складові дати і часу подано "0" у всіх позиціях, але не NULL, як все поле. Якщо із запиту прибрати посилання на полі start_datetime і функцію, його заповнює now(), то поле start_datetime буде містити значення NULL. Верхня частина картинки показує таблицю з використанням функції заповнення, нижня частина - таблицю без використання now(). Відмінності істотні.


Час юнікс і користувальницьке час

Поля таблиці MySQL timestamp & datetime відрізняються по заповненню та використанню. Наприклад, варіант:
  • int mktime ([int hour[, int minute[, int second[,
  • доступен для поля типа datetime, в то время как поле типа timestamp больше ориентируется на функции самого языка MySQL.С тем, чтобы использовать поля времени наиболее эффективно и безопасно, целесообразно ориентироваться на способ работы с MySQL timestamp в предлагаемом функционале, в том его назначении, которое определено самой базой данных. Это её собственный штамп момента времени, формат представления времени.
    Як використовувати MySQL: timestamp і datetime
    Тип datetime более относим ко времени в представлении эпохи юникс и его можно ассоциировать, например, с функцией PHP mktime() или обычным текстовым форматом, например:
    Як використовувати MySQL: timestamp і datetime
    Здесь переменная $cStndDate - обычный текст, который интерпретируется в запросе как что-то, написанное в формате даты/времени. Если переменная указана правильно, то в нужное поле таблицы запишется нужное значение.Пользовательское время - это требование задачи. Далеко не всегда следует представлять базе данных все права по управлению временем. Она всегда все сделает «по-своему». Это не всегда правильно, например, нужны названия русских месяцев или особый порядок записи дня, месяца и года.

    Часові пояси і правильна логіка

    Робота з MySQL timestamp & datetime вимагає уважності і акуратності. Інша справа - власний формат дати, записаний у вигляді звичайного тексту. Правда, в цьому випадку втрачаються переваги стандартних типів дати, наприклад, сортування або обчислення над датами, але з'являються бажані переваги.
    Як використовувати MySQL: timestamp і datetime
    У будь-якому випадку, розробнику слід бути гранично уважним. Часові пояси, налаштування локалізації та безліч інших нюансів можуть створити певне нерозуміння. Якщо що-то при роботі з датою стало з NULL або нулями у всіх позиціях, треба насамперед шукати помилку у власному алгоритмі. MySQL, його поля дати та функції часу працюють виключно стабільно і правильно.