Sebenarnya, Anda bisa simpan tanggal di bawah tahun 1000 di MySQL meskipun ada dokumentasi klarifikasi:
mysql> describe test; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | birth | date | YES | | NULL | | +-------+---------+------+-----+---------+-------+
-Anda masih perlu memasukkan tahun dalam format 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)
-dan Anda akan dapat beroperasi dengan ini sebagai tanggal :
mysql> select birth + interval 5 day from test; +------------------------+ | birth + interval 5 day | +------------------------+ | 0995-03-10 | +------------------------+ 1 row in set (0.03 sec)
Adapun keamanan. Saya tidak pernah menghadapi kasus ketika ini tidak akan bekerja di MySQL 5.x (karena, tidak berarti bahwa itu akan 100% bekerja, tetapi setidaknya dapat diandalkan dengan probabilitas tertentu)
Tentang tanggal SM (di bawah Kristus). Saya pikir itu sederhana - di MySQL ada tidak mungkin untuk menyimpan tanggal negatif juga. Yaitu. Anda perlu menyimpan tahun secara terpisah sebagai bidang bilangan bulat yang ditandatangani:
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)
Tapi saya pikir, dalam hal apa pun (di bawah/di atas tahun 0) lebih baik menyimpan bagian tanggal sebagai bilangan bulat dalam kasus itu - ini tidak akan bergantung pada fitur yang tidak berdokumen. Namun, Anda harus beroperasi dengan 3 bidang tersebut bukan sebagai tanggal (jadi, dalam beberapa hal itu bukan solusi untuk masalah Anda)