Каков наилучший способ хранения пользовательских BIRTHDATES в MySQL / PHP? - PullRequest
0 голосов
/ 17 октября 2011

Каков наилучший способ хранения пользовательских РОЖДЕНИЙ в MySQL / PHP и почему?

В настоящее время я храню его как VARCHAR(10) в следующем формате:

MM-DD-YYYY

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

Пожалуйста, не просто говорите, что это лучший метод, а также объясните, почему это лучший метод, чтобы я мог быть убежден в том, чтобы изменить весь способ обработки дат рождения на моем сайте, что является огромным обязательством, если это потребуется.

Спасибо.

Ответы [ 4 ]

8 голосов
/ 17 октября 2011

MySQL имеет собственный тип поля для дат: DATE.

Пожалуйста, не просто говорите, какой метод самый лучший, а также объясните, почему он самый лучший.так что я могу быть убежден, чтобы изменить весь способ обработки дат рождения на моем сайте, что является огромным обязательством, если это потребуется.

Не уверен, какое дальнейшее объяснение дать :) Если вы хотитехранить даты в таблице MySQL, DATE просто является правильным выбором.Он поставляется с оптимизированной индексацией для запросов, таких как >, < и BETWEEN, сортирует быстро и может работать с любой датой из 1001-9999 годов, так что это действительно путь.

2 голосов
/ 17 октября 2011

Храните его как тип DATE, поскольку он очень эффективен как для хранения, так и для операций с полем (фильтрация по дате и т. Д.).

0 голосов
/ 13 ноября 2015

Это часть php с проверкой, объявите переменную Err в null раньше.

<?php
    if (! isset ( $_POST ['yearOfBirth'] ) || empty ( $_POST ['yearOfBirth'] )) {
        $isFormValid = FALSE;
        $yearErr = "Please select year";

        if (! isset ( $_POST ['monthOfBirth'] ) || empty ( $_POST ['monthOfBirth'] )) {
            $isFormValid = FALSE;
            $monthErr = "Please select month";

            if (! isset ( $_POST ['dayOfBirth'] ) || empty ( $_POST ['dayOfBirth'] )) {
                $isFormValid = FALSE;
                $dateErr = "Please complete the dob";

                $dob = $_POST ['yearOfBirth'] . "-" . $_POST ['monthOfBirth'] . "-" . $_POST ['dayOfBirth'];
//              exit(print_r($_POST));
            }
        }
    }
---------------------------
Here is the SQL part.
----------------------------------
$dob = $_POST["yearOfBirth"] . "-" . $_POST["monthOfBirth"] . "-" . $_POST["dayOfBirth"];

$register = "INSERT INTO tablename( dob, )
    VALUES('$dob',)";

Надеюсь, это поможет

0 голосов
/ 17 октября 2011

Как уже отвечали другие: MySQL имеет формат DATE только для дат, но если вам нужны время и дата, есть также DATETIME и TIMESTAMP.

DATE требует 3 байта памяти, DATETIME требует 8 байтов, а TIMESTAMP требует 4.

Кстати, для INT также требуется 4 байта. Если вы просто используете DATE без соответствующего времени - например, для ваших дней рождения - тогда это на самом деле не проблема, однако есть статья , в которой представлены некоторые аргументы относительно того, почему вы можете избежать использования DATETIME. и я думаю, что это стоит прочитать. Также стоит прочитать комментарии, так как некоторые люди отметили, что предложения в статье не всегда практичны: например, У оптимизатора запросов иногда возникают проблемы с функциями даты, а также с трудностями сохранения дат в виде меток времени Unix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...