在MySQL中,使用字符串数据类型代替datetime数据类型来存储日期是一个好主意吗?

6
在使用MySQL数据库实现Web应用程序时,我在思考是否只使用字符串数据类型来存储日期是一个好主意?
例如,我可以将日期存储为“201110191503999”并保存到数据库中。这也方便按日期查询。例如,select * from some_table where the_date like '20111019%'
如果我们使用字符串来表示日期,是否会有性能问题?同时,使用日期/时间数据类型有什么优势吗?
提前感谢您的回答!

沿着这条线,您也可以将数字存储为字符串 :) - Álvaro González
不同的数据类型存在是有原因的 - 你可以把每个数据都当作字符串来处理,但我不建议这样做。 - Damien_The_Unbeliever
是的,我明白日期/日期时间类型的原因了。感谢您的评论。 - Jake W
3个回答

7
始终根据需要使用列类型;如果使用日期,请使用 DATETIME,如果是时间戳,请使用 TIMESTAMP 等。
根据您编写代码的不同,可以在实际页面上使用任何语言进行数据格式化。
此外,您还可以利用 MySQL 函数,如 NOW(),而不是使用语言版本然后将其存储到数据库中。

1
谢谢你的回答。我之前认为字符串比较起来很容易,而且不用担心日期函数,但现在发现需要更精细的程序控制。我同意并会坚持使用日期/日期时间类型。 - Jake W

6
如果你的数据是日期类型,那么请将数据存储在 DATE(或 DATETIME 如果有时间元素)中。
如果你将日期存储为字符串,那么会引发很多问题!例如,有人会写入“我不是一个日期”的值到你的“date”字段中,该怎么办?或者,如果你有 '20111019' 和 '2011-10-19' 两个值,并希望它们被视为相等,又该怎么办?此外,你将错过整个 MySQL DATE and TIME specific functions
如果可能的话,请永远不要将日期存储为字符串。

谢谢您的回答,我意识到日期/时间是必要的。在某些系统中,我过去使用字符串,它运行良好,但我认为可能存在潜在问题。 - Jake W

1

我也在考虑做同样的事情。我一直在尝试使用MySQL将一个与时区无关的值存储到数据库中,这个值应该是基于GMT的。但是它真的不起作用。我尝试了各种标志useTimeZone=true和Java中的JDBCShift,但仍然没有任何进展。此外,由于某些奇特的Java消息,吉隆坡时区也无法使用。所以,如果您可以控制格式,当然可以使用String类型。许多人以前都这样做过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接