我们在Freenode上进行了这个编程讨论,当我尝试使用VARCHAR(255)以这种格式存储日期变量时出现了这个问题:D/MM/YYYY.所以问题是为什么使用VARCHAR存储日期这么糟糕.以下是优点:
那么您更喜欢用什么来存储日期?SQL VARCHAR还是SQL DATE?
Kra*_*ica 41
为什么不用锤子拧螺丝?
因为它不适合这项工作.
VARCHAR版本的一些缺点:
当然,在你的爱好项目中,你可以做你想做的事.在专业的环境中,我坚持使用正确的工具来完成工作.
Sla*_*wek 15
如果您拥有超过2-3百万行的数据库,您就会知道为什么使用DATETIME比使用VARCHAR更好:)
简单的答案是,对于数据库 - 处理能力不再是问题.只是数据库大小是因为HDD的寻道时间.
基本上使用现代硬盘,如果以随机顺序(通常是这种情况)读取,您可以读取大约100条记录/秒,因此您必须尽一切可能最小化数据库大小,因为:
最终它总是硬盘的寻道时间会杀了你.例如.一些简单的带有多行的GROUP BY查询在磁盘上完成时可能需要几个小时,相比之下,由于寻道时间在RAM =>中完成几秒钟.
对于VARCHAR,您无法进行任何搜索.如果你讨厌SQL如何处理日期的方式,那么只需在32位整数字段中使用unix时间戳.您将(基本上)使用SQL DATE字段的所有优点,您只需使用您选择的编程语言而不是SQL函数来操作和格式化日期.
两个原因:
那么让我们举一组看起来像这样的记录:
5/12/1999 | Frank N Stein
1/22/2005 | Drake U. La
10/4/1962 | Goul Friend
Run Code Online (Sandbox Code Playgroud)
如果我们按照您的方式存储数据,但按照订单中的日期排序,SQL将使用如下所示的结果集进行响应:
1/22/2005 | Drake U. La
10/4/1962 | Goul Friend
5/12/1999 | Frank N. Stein
Run Code Online (Sandbox Code Playgroud)
如果我们将日期存储为DATETIME,SQL将正确地响应它们,如下所示:
10/4/1962 | Goul Friend
5/12/1999 | Frank N. Stein
1/22/2005 | Drake U. La
Run Code Online (Sandbox Code Playgroud)
此外,如果您需要以不同的格式显示日期,例如YYYY-MM-DD,那么您需要转换所有数据或处理混合内容.当它存储为SQL DATE时,您将被迫在代码中进行转换,并且很可能有一个位置可以更改格式以显示所有日期 - 免费.