我正在使用MySQL,我在表中有一个字段需要存储一年+月值。该字段不需要日,分和秒信息。我打算将字段设为CHAR(6)
,因为使用>
,=
和<
来比较字符串似乎没问题。
SELECT '201108' < '201109'
>1
我想使用这种格式,因为我可以将相同的字符串插入Lucene索引引擎。
这是一个好主意还是我应该坚持使用DATE
?
答案 0 :(得分:7)
这样可以正常工作,直到你必须实现自己的代码来计算两个值之间的差异,或计算出你将来六个月所需的价值。
使用日期类型,这就是(a)的日期类型。如果分辨率过高,则强制执行将日期始终设置为1的约束。或者使用插入/更新触发器强制执行此操作。
然后你可以使用你的DBMS供应商已经编写的所有花哨日期操作代码,代码可能会更高效,因为它将处理本机二进制类型而不是字符串。
由于MySQL date
类型实际上更短而不是char(6)
,因此您在此特定情况下也可以节省空间。数据库决策通常不会为您提供空间和时间优势(通常需要权衡),因此您应该尽可能地抓住它们。
(a)这适用于所有类型,例如date
,time
和datetime
。
答案 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的更多详细信息,请访问