Eigenlijk kunt u bewaar datums onder het jaar 1000 in MySQL ondanks zelfs documentatie verduidelijking:
mysql> describe test; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | birth | date | YES | | NULL | | +-------+---------+------+-----+---------+-------+
-je moet nog steeds het jaartal in YYYY-formaat invoeren:
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)
-en u kunt hiermee werken als een datum :
mysql> select birth + interval 5 day from test; +------------------------+ | birth + interval 5 day | +------------------------+ | 0995-03-10 | +------------------------+ 1 row in set (0.03 sec)
Wat betreft veiligheid. Ik heb nog nooit een geval meegemaakt waarin dit niet werkt in MySQL 5.x (dat betekent natuurlijk niet dat het 100% zal werken, maar het is in ieder geval betrouwbaar met een zekere waarschijnlijkheid)
Over BC data (onder Christus). Ik denk dat dat eenvoudig is - in MySQL is er geen manier om ook negatieve datums op te slaan. D.w.z. u moet het jaar apart opslaan als een ondertekend geheel getalveld:
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)
Maar ik denk dat het in ieder geval (onder/boven jaar 0) in dat geval beter is om datumdelen als gehele getallen op te slaan - dit is niet afhankelijk van ongedocumenteerde functies. U zult echter met die 3 velden moeten werken, niet als de datums (dus in zekere zin is dat geen oplossing voor uw probleem)