什么是最好的方式来存储用户的生日在MySQL/PHP


What is the best way to store user BIRTHDATES in MySQL/PHP?

在MySQL/PHP中存储用户BIRTHDATES的最佳方法是什么,为什么?

我目前以以下格式将其存储为VARCHAR(10):

MM-DD-YYYY

…但我有一种感觉,这不是最好的方法,特别是因为我有时看到该字段的无效年份。

请不要只说最好的方法是什么,也要解释为什么这是最好的方法,这样我就可以被说服改变我的网站上处理生日的整个方式,如果需要的话,这是一项巨大的任务。

谢谢。

mySQL有一个原生的日期字段类型:DATE

请不要只说最好的方法是什么,也要解释为什么这是最好的方法,这样我就可以被说服改变我的网站上处理生日的整个方式,如果需要的话,这是一项巨大的任务。

不确定进一步的解释给:)如果你想在mySQL表中存储日期,DATE只是一个正确的选择。它为>, <BETWEEN等查询提供了优化的索引,排序速度快,可以处理1001-9999年的任何日期,所以这确实是要走的路。

将其存储为DATE类型,因为它对于涉及该字段的存储和操作(按日期过滤等)都非常有效。

正如其他人已经回答的那样:MySQL只有日期格式,但是如果你需要时间和日期,也有DATETIME和TIMESTAMP。

DATE需要3个字节的存储空间,DATETIME需要8个字节,TIMESTAMP需要4个字节。

顺便提一下,INT也需要4个字节。如果您只是使用DATE而没有相应的时间(比如您的生日),那么这并不是一个真正的问题,但是有一篇文章提出了一些关于为什么您可能想要避免使用DATETIME的争论,我认为值得一读。评论也值得一读,因为有些人注意到文章中的建议并不总是实用的:例如,查询优化器有时在日期函数方面存在问题,并且难以将日期存储为unix时间戳。

这是php部分验证是否声明Err变量为空之前。

<?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',)";

希望能有所帮助