Природне уявлення про час - це дати: рік, місяць, день і час: годинник, хвилини секунди. В деяких додатках мають значення дні тижня і частки секунд, але у всіх додатках і завжди необхідні інструменти для обробки змінних часу та їх подання в природному вигляді.
Час характеризується місцем у просторі, де подія відбувається і точкою, де воно може бути використано. Це загальний порядок, який визначає необхідність локалізації та облік часових поясів.
MySQL: типи даних для запису часу
Формально, типи даних в системі управління базами даних MySQL становить п'ять описателей (date, time, timestamp та year). Розробник часто віддає перевагу універсальний варіант: char (20) - коли є об'єктивні підстави використовувати свою інтерпретацію функції MySQL date_format() або забезпечити необхідні умови для правильного сортування.
У цьому прикладі формується таблиця варіантів подання дат, і в неї вносяться два рядки. Перший рядок містить дані в природному форматі, і у складі заповнюваних полів відсутнє поле "x_timestamp". Друга рядок по всіх полях використовує функцію MySQL now(). Слід зазначити, що вказане поле заповнюється в обох випадках.
Мітка часу і її формат
Цей тип поля часу (timestamp) і використання функції MySQL date_format() надзвичайно ефективно для створення міток часу. Це «не має ніякого відношення» до будь-якого алгоритму. Це не вимагає особливих вишукувань в уявленні дати або часу. Це просто тимчасова мітка - точка на лінії розвитку подій.
Поле цього типу заповнюється в момент створення рядка. Немає необхідності приділяти йому увагу, але завжди і в будь-якому запиті можна покластися: MySQL date_format () datetime = час, коли рядок була створена. Важливо, звісно, ніколи його не змінювати. Рядок створена і час її створення визначено лише одного разу. Читати можна, змінювати не можна. У даного рішення дуже багато сфер застосування: протокол діалогу з відвідувачем; лог журналу безпеки; відстеження дій співробітників; календар подій; поштову скриньку і т. д. Час - це, насамперед, низка подій. Все, що пов'язано з веб-ресурсом, що прагне до досконалості, зростанню рейтингу і реальному відображенню дійсності так чи інакше пов'язане з правильним відображенням часу: у тому вигляді, як є, - це не видно користувачеві, але доступно розробнику; у тому вигляді, як це має бути відображено на веб-ресурсі, використане в алгоритмі, враховано в документі і т. д. Час багатогранно і залежить від тієї точки простору, де відбулася подія в контексті тієї точки простору, де воно повинно бути використане чи відображено.
Загальний сенс MySQL select date_format()
Запит на вибірку інформації - головна фраза на мові SQL. Вона настільки затребувана, що дуже важливо при формуванні потрібної вибірки максимально швидко перетворювати її вміст в належний вигляд, не обтяжуючи алгоритм додатковими конструкціями.
З цієї точки зору MySQl date_format() дозволяє оформляти будь-яке значення дати і часу в той формат, в який необхідно відразу в момент виконання запиту. У таблиці наведено два рядки і є два однакових поля: "x_timestamp" і "x_datetime". Запит звертається до цих двох полів, але вказує їх імена, минаючи PHP, в date MySQL format безпосередньо.
Рядок форматування може бути будь-якою. Зміст рядка форматування транслюється в результат запиту у форматі «як є» з заміною ключових елементів формату «%*», де символ зірочки означає символ формату: рік, місяць, день і годину.
Національний формат часу і сортування
Використання дати в стандарті типу MySQL - краще рішення для використання функціоналу мови SQL. Немає проблем ні з сортуванням, ні з обчисленнями, ні з форматуванням в стилі MySQL date_format(). Але не у всіх країнах робочий тиждень починається з неділі, не завжди вважається нормальним подання часу в 12-годинному форматі, і не у всіх мовах є поняття "AM" і "PM". Є багато такого роду національних особливостей, але переважна більшість з них лежить за межами функціоналу мови SQL.
Сумнівно, що взагалі існує такий діалект SQL, який здатний розширитися на облік національного колориту країн далі, ніж за межі терміна "локалізація". Власне, не дивно, що "локалізація" на практиці означає більше автозаміну одних слів (сполучень) на інші в залежності від мови. Але не завжди національна мова визначає все, в першу чергу, він ніяк не пов'язаний з правильним поданням часу.
Ключ подій і ключ даних
Час ніколи не тече назад, отже, це ідеальний ключ до будь-рядку, до будь-якої таблиці, до будь базі даних. Дві події можуть відбутися одночасно, якщо інтервал їх відстеження більше, ніж різниця в часі між їх появою. Наприклад, два користувача зайшли на сайт в одну і ту ж хвилину, але в різні секунди цієї хвилини.
На PHP є цікаве рішення: є об'єкт і є екземпляр об'єкта. Є ідея статичної «змінної»: private static $iUniqueNo = -1; //"УУ" завжди унікальне число //при кожному виклику цієї функції $iUniqueNo буде іншим і //протягом однієї секунди ніколи не повториться. public function IncUniqueNo() { if (self::$iUniqueNo > 99) self::$iUniqueNo = 0; else self::$iUniqueNo++; } Не надто фантазуючи, зливаючи в одне ціле: рік, місяць, день, години, хвилини, секунди і $iUniqueNo, отримуємо: ГГГГММДДччммссУУ - унікальний ключ ("УУ" = "$iUniqueNo") для запису і одночасно штамп моменту часу для будь-якого використання. Це ідеальне рішення в контексті типу часу бази даних і функції MySQL date_format(), яка елементарно робить і час, і ключ з одного поля "timestamp" одночасно.