我正在开发一个需要将成员生日插入MySQL数据库的项目。但我很困惑。其实我这样使用它:
INT(10)
所以我改变格式,例如“27/06/1960”使用PHP进行unix时间并使用函数date()来显示生日。有没有更好的解决方案?你推荐阅读有关“DATE,DATETIME,TIMESTAMP”的资源吗?
感谢。
答案 0 :(得分:9)
我从DATETIME manual page for your database开始。通常,如果数据库具有专门为您计划存储在该列中的数据类型而设计的特定列类型,则使用它通常是个好主意。它不仅可以使列中存储的内容更加清晰,而且还可以让您编写更强大的查询,并让数据库引擎为您优化这些查询。
答案 1 :(得分:2)
找出某人生日的最快方法是使用2个或3个单独的INT列,可能还有一个添加列,将整个事物存储为DATETIME。虽然您通常不使用int或多列来表示日期,但请记住,如果此表中有很多行,请执行类似
的操作SELECT * FROM people WHERE birthday LIKE '%-12-24';
效率不高。它在较小的数据集中工作正常但如果我们开始进入大型数据集(取决于您的硬件),则会变慢。有时您需要以不寻常的方式存储数据以保持系统效率,通过最多4组日期列(月,日,年,并将整个事件存储为日期戳)浪费的微量空间量得到回报在速度。
通过这样做你可以做到:
SELECT * FROM people WHERE birth_month=12 AND birth_day=24
答案 2 :(得分:1)
使用DATE列。 MySQL期望输入为“YYYY-MM-DD”并输出类似的值。
用户未提供的日期可以编码为NULL列。虽然您可能不需要“NULL”所需的额外位,但您甚至可以为此编写特殊值“0000-00-00”。
答案 3 :(得分:-1)
没有正确也没有错误的决定。 只有一种方式你最喜欢,这是正确的决定。
我真的可以说,只要您遵循自己的设计,如何设计您的数据库和代码并不重要。 因此,如果您使用特殊的日期模式,而不是通过代码使用它,那么您将不会遇到成千上万的转换。
E.g。 HTML表单模式:DD / MM / YYYY
PHP模式(exlpode('/',$ date)): DD:MM:YYYY
数据库模式:DD-MM-YYYY