使用CHAR(6)表示年+月字段是一个坏主意吗?

时间:2011-08-30 03:48:33

标签: mysql datetime char

我正在使用MySQL,我在表中有一个字段需要存储一年+月值。该字段不需要日,分和秒信息。我打算将字段设为CHAR(6),因为使用>=<来比较字符串似乎没问题。

SELECT '201108' < '201109'
>1

我想使用这种格式,因为我可以将相同的字符串插入Lucene索引引擎。 这是一个好主意还是我应该坚持使用DATE

4 个答案:

答案 0 :(得分:7)

这样可以正常工作,直到你必须实现自己的代码来计算两个值之间的差异,或计算出你将来六个月所需的价值。

使用日期类型,这就是(a)的日期类型。如果分辨率过高,则强制执行将日期始终设置为1的约束。或者使用插入/更新触发器强制执行此操作。

然后你可以使用你的DBMS供应商已经编写的所有花哨日期操作代码,代码可能会更高效,因为它将处理本机二进制类型而不是字符串。

由于MySQL date类型实际上更短而不是char(6),因此您在此特定情况下也可以节省空间。数据库决策通常不会为您提供空间时间优势(通常需要权衡),因此您应该尽可能地抓住它们。


(a)这适用于所有类型,例如datetimedatetime

答案 1 :(得分:1)

您想要使用日期,但不能在日期字段中存储任何内容。数据库在搜索方面比您的代码更有效,因为数据库已经过优化,可以处理这样的查找。您希望在日期字段中存储虚拟值以使其正常工作。

答案 2 :(得分:0)

好吧,因为MySQL only takes 3 bytes to store a date(警告:该链接适用于MySQL 5.0版。检查您的版本的文档以确保),从存储的角度来看会更好 - 以及性能立场时进行比较 - 使用date

答案 3 :(得分:0)

您也可以使用日期字段,然后在选择值时,您可以使用DATE_FORMAT函数和该日期来选择年份和月份。

将字段作为日期类型,然后

就像你输入的日期是'2011-08-30'

现在您希望结果为201108写入

选择DATE_FORMAT('2011-08-30','%Y%m');

它将结果显示为201108

有关DATE_FORMAT的更多详细信息,请访问

http://davidwalsh.name/format-date-mysql-date_format