在Mysql'中存储非公历日期;s日期类型

在Mysql'中存储非公历日期;s日期类型,mysql,date,datetime,persian-calendar,Mysql,Date,Datetime,Persian Calendar,我有一个mysql表,它有一个date类型的列。 我将在该列中存储非公历日期(即Jalali日期)。 我通过使用phpMyadmin并存储一个Jalali日期来测试这一点,没有出现错误。 将非公历日期存储在date类型中是一个好主意吗? 若否,;哪个更好?将其存储为varchar或timestamp或timestamp为Int或其他内容 以日期类型存储非公历日期是个好主意吗 不可以。除了一个日历系统中的某些有效日期在另一个日历中不存在之外,处理日期类型列的函数可能无法正常工作。问题不仅仅是存储数

我有一个mysql表,它有一个
date
类型的列。
我将在该列中存储非公历日期(即Jalali日期)。
我通过使用
phpMyadmin
并存储一个Jalali日期来测试这一点,没有出现错误。
将非公历日期存储在
date
类型中是一个好主意吗?
若否,;哪个更好?将其存储为
varchar
timestamp
或timestamp为
Int
或其他内容

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

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

将其存储为varchar或timestamp或timestamp为Int或其他形式

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


选择
TIMESTAMP
DATE
会更改问题,因为前者表示特定的时间,而后者表示日历中的特定条目。如果你想把时间放在日期之外,它们的含义仍然不同。您应该考虑一些问题,如夏令时的更改,这会导致一些人更喜欢输入日历条目(日期),而一些人更喜欢从1970年1月1日开始的秒数(时间戳)。e、 g.根据当前伊朗政府法律,Hijri Shamsi日历中有两个时间戳,分别是1393-06-30 23:30:00。

您可以将非公历日期存储在数据库中的
整型
字段中

示例:

  • 年:1396,月:11,日:17
    =>
    13961117‍‍‍‍‍
  • 年:1393,月:4,日:9
    =>
    13930409

通过使用此功能,您可以查询行以查找特定日期以及比特定日期短的日期,但遗憾的是,您无法将它们相互比较。

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


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

非公历仍然按
时间
运行,因此可以将其存储在4个单独的列中,如:

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

我可以在不转换的情况下存储日期,并允许按

分组,谢谢;我最终设法首先转换它,然后将它存储为一个公历日期,因为我认为这个方法可以同时计算mysql的日期和日期的正确性itself@4r1y4n,这将在以后提出一些问题,例如如何按月分组。