2014-10-31 88 views
2

我有一个mysql表,它有一列date类型的列。
我将在此列中存储非格里历日期(即Jalali日期)。
我通过使用phpMyadmin并存储了Jalali日期并且没有发生错误,测试了这一点。
date类型中存储非格里历日期是一个好主意吗?
如果不是;哪个更好?将其存储为varchartimestamp或时间戳为Int或其他?在MySQL的日期类型中存储非格里历日期

回答

4

在日期类型中存储非格里历日期是一个好主意吗?

号除此之外,在一个日历系统中的一些有效的日期没有在另一个日历存在,对DATE类型列工作功能可能无法正常工作。这个问题不仅仅是存储数据,你需要处理这些数据,例如将它们与CURDATE()进行比较。

将它作为varchar或作为时间戳或时间戳存储为Int或其他东西?

如果你选择一个正确的格式,用两位数字月份和日期和数字为年静态数字,字符串类型,CHARVARCHAR是好的。比较主题和对方只是一个词汇比较,你仍然可以编写你的函数或程序来扩展功能。

选择TIMESTAMPDATE更改问题为前者代表特定时间,但后者代表日历中的特定条目。如果你想把时间放在日期旁边,他们的意义仍然不同。您应该考虑一些问题,例如导致某些人愿意放入日历条目(DATE)的日光节约时间更改以及某些更喜欢1970年1月1日(TIMESTAMP)之后的秒数。例如根据伊朗目前的政府法律,Hijri Shamsi日历中有1393-06-30 23:30:00两个时间戳。

+1

谢谢;我终于设法首先转换,然后将其存储为公历日期,因为我认为这种方法给了我mysql日期计算和日期本身的正确性 – RYN 2014-11-03 23:11:09

+1

@ 4r1y4n,这会稍后提出问题,例如如何逐组。 – azerafati 2016-03-17 12:52:11

0

您可以将非格利高日期存储在数据库的integer字段中。

例子:

  • year:1396, month:11, day:17 =>13961117‍‍‍‍‍
  • year:1393, month:4, day:9 =>13930409

利用这一点,您可以查询行发现是<=>不是一个具体的日期和日期一个具体的日期,但不幸的是,你无法将它们相互比较。

0

几乎所有数据库系统的内部存储和二进制接口都与日历无关。您只需将日期(可能时间)存储到数据库中,不提供日历信息。这只是从特定时间点(通常是1970-01-01午夜)开始的简单天数,秒或毫秒数。

因此,您只需在应用程序层中提供日期的API抽象。其他一切都会奏效。您可以将所有日期转换为格里历或Unix时间戳,并像往常一样向MySQL发送查询。