6

我有一个 mysql 表,其中有一列date类型。
我将在此列中存储非公历日期(即 Jalali 日期)。
我通过使用phpMyadmin和存储 Jalali 日期对此进行了测试,并且没有发生错误。
以类型存储非公历日期是个好主意date吗?
如果不; 哪个更好?将其存储为varcharor astimestamp或 timestamp asInt或其他?

4

4 回答 4

6

以日期类型存储非公历日期是个好主意吗?

不。除了一个日历系统中的某些有效日期在另一个日历中不存在之外,处理DATE类型列的功能可能无法正常工作。问题不仅仅是存储数据,您还需要处理这些数据,例如将它们与CURDATE().

将其存储为 varchar 或时间戳或时间戳为 Int 或其他内容?

如果您选择正确的格式,请使用两位数表示月份和日期,使用静态位数表示年份、字符串类型,CHAR或者VARCHAR可以。将主题相互比较只是词汇比较,您仍然可以编写函数或过程来扩展功能。

选择TIMESTAMPDATE更改问题,因为前者代表特定时间,而后者代表日历中的特定条目。如果您想将时间放在日期旁边,它们的含义仍然不同。您应该考虑诸如夏令时更改之类的问题,这会导致一些人更喜欢输入日历条目 (DATE),而另一些人则更喜欢从 1970 年 1 月 1 日起经过的秒数 (TIMESTAMP)。1393-06-30 23:30:00例如,根据当前的伊朗政府法律,Hijri Shamsi 日历中有两个时间戳。

于 2014-11-03T20:54:36.037 回答
5
于 2017-07-02T14:39:36.773 回答
0

Internal storage and binary interface of almost all database systems have nothing to do with calendars. you just store date (and possibly time) into database, providing no calendaring information. It's only a simple number of days, seconds or milliseconds past from a specific point in time (usually midnight 1970-01-01).

So you just need to provide an API abstraction of dates in your application layer. Everything else will work. You convert all your dates to Gregorian or Unix timestamp, and send queries to MySQL as usual.

于 2017-10-03T13:10:02.037 回答
0

Non Gregorian calendar still operate by Year, Month, Day and Time so it can be stored in 4 separate columns like:

CREATE TABLE `Calendar` (
    `Year` int,
    `Month` tinyint,
    `Day` tinyint,
    `Time` time
);

I make possible to store dates without conversion and permit group by Year and Month

于 2020-09-20T14:33:19.520 回答