Trên thực tế, bạn có thể ngày cửa hàng bên dưới năm 1000 trong MySQL mặc dù thậm chí documentation làm rõ:
mysql> describe test;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| birth | date | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
-bạn vẫn cần phải năm đầu vào ở định dạng YYYY:
mysql> insert into test values (1, '0995-03-05');
Query OK, 1 row affected (0.02 sec)
mysql> select * from test;
+------+------------+
| id | birth |
+------+------------+
| 1 | 0995-03-05 |
+------+------------+
1 row in set (0.00 sec)
-và bạn sẽ có thể hoạt động với điều này dưới dạng ngày:
mysql> select birth + interval 5 day from test;
+------------------------+
| birth + interval 5 day |
+------------------------+
| 0995-03-10 |
+------------------------+
1 row in set (0.03 sec)
Vì sự an toàn. Tôi đã không bao giờ phải đối mặt với một trường hợp khi điều này sẽ không làm việc trong MySQL 5.x (đó, nguyên nhân, không có nghĩa là nó sẽ làm việc 100%, nhưng ít nhất nó là đáng tin cậy với xác suất nhất định)
Giới thiệu về BC ngày (dưới Đấng Christ). Tôi nghĩ điều đó đơn giản - trong MySQL có không có cách nào để lưu trữ ngày phủ định. I E. bạn sẽ cần đến cửa hàng năm riêng biệt như một trường số nguyên ký:
mysql> select '0001-05-04' - interval 1 year as above_bc, '0001-05-04' - interval 2 year as below_bc;
+------------+----------+
| above_bc | below_bc |
+------------+----------+
| 0000-05-04 | NULL |
+------------+----------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1441 | Datetime function: datetime field overflow |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)
Nhưng tôi nghĩ rằng, trong mọi trường hợp (sau đây/ở trên năm 0) nó tốt hơn đến các bộ phận ngày cửa hàng như số nguyên trong trường hợp đó - điều này sẽ không dựa đến tính năng không có giấy tờ. Tuy nhiên, bạn sẽ cần phải hoạt động với 3 trường đó không phải là ngày (do đó, theo nghĩa nào đó không phải là giải pháp cho vấn đề của bạn)
Trong những trường hợp như thế này, bạn có thể xem xét sử dụng một cơ sở dữ liệu khác nhau; có lẽ PostgreSQL có thể cung cấp phạm vi ngày bạn cần không? ([tài liệu] (http://www.postgresql.org/docs/current/static/datatype-datetime.html) dường như ngụ ý phạm vi ngày lớn hơn đáng kể là có thể) – Spudley
@Spudley: Oracle, DB2, Firebird don ' t có giới hạn đó. Vì vậy, có rất nhiều lựa chọn thay thế. –
@a_horse_with_no_name - PostgreSQL là DB mã nguồn mở nổi tiếng nhất sau mySQL, nhưng có, có rất nhiều tùy chọn. – Spudley