Faktisk kan du gem datoer under år 1000 i MySQL på trods af selv dokumentation præcisering:
mysql> describe test; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | birth | date | YES | | NULL | | +-------+---------+------+-----+---------+-------+
-Du skal stadig indtaste årstal i formatet ÅÅÅÅ:
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)
-og du vil være i stand til at arbejde med dette som en dato :
mysql> select birth + interval 5 day from test; +------------------------+ | birth + interval 5 day | +------------------------+ | 0995-03-10 | +------------------------+ 1 row in set (0.03 sec)
Hvad angår sikkerheden. Jeg har aldrig stået over for et tilfælde, hvor dette ikke vil fungere i MySQL 5.x (det betyder naturligvis ikke, at det vil fungere 100 %, men i det mindste er det pålideligt med en vis sandsynlighed)
Om f.Kr.-datoer (under Kristus). Jeg tror, det er enkelt - i MySQL er der ingen måde at gemme negative datoer også. dvs. du bliver nødt til at gemme år separat som et signeret heltalsfelt:
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)
Men jeg tror, at det under alle omstændigheder (under/over år 0) er bedre at gemme datodele som heltal i så fald - dette vil ikke være afhængigt af udokumenterede funktioner. Du bliver dog nødt til at arbejde med disse 3 felter, der ikke er datoen (så på en eller anden måde er det ikke en løsning på dit problem)