在MySQL / PHP中存储用户BIRTHDATES的最佳方法是什么?为什么?
我目前以下列格式将其存储为VARCHAR(10)
:
MM-DD-YYYY
...但我觉得这不是最好的方式,特别是因为我有时会看到该领域的无效岁月。
请不要只说出最好的方法是什么,也要解释为什么这是最好的方法,这样才能让我确信改变我的网站上处理生日的方式,如果需要的话,这是一项艰巨的任务。
感谢。
答案 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',)";
希望这有帮助