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

时间:2011-10-17 09:46:54

标签: php mysql date

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

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

MM-DD-YYYY

...但我觉得这不是最好的方式,特别是因为我有时会看到该领域的无效岁月。

请不要只说出最好的方法是什么,也要解释为什么这是最好的方法,这样才能让我确信改变我的网站上处理生日的方式,如果需要的话,这是一项艰巨的任务。

感谢。

4 个答案:

答案 0 :(得分:8)

mySQL具有日期的本机字段类型:DATE.

  

请不要只说出最好的方法是什么,也要解释为什么这是最好的方法,这样才能让我确信改变我的网站上处理生日的方式,如果需要的话,这是一项艰巨的任务。

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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

顺便说一句,INT也需要4个字节。如果你只是在没有相应时间的情况下使用DATE - 比如你的生日 - 那么这不是一个真正的问题,但是an article提出了一些关于你为什么要避免使用DATETIME的论据,而我认为值得一读。有些人已经注意到文章中的建议并不总是实用的,例如,也值得阅读评论。查询优化器有时会遇到日期函数问题,并且难以将日期存储为unix时间戳。

答案 3 :(得分:0)

这是带有验证的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',)";

希望这有帮助