在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',)";
希望能有所帮助