Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menyimpan tanggal yang sangat lama dalam database?

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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ini mungkin untuk mendapatkan jumlah total baris dengan batas offset

  2. Bagaimana cara saya menginstal dan menggunakan MySQLdb untuk Python 3 di Windows 10?

  3. Bagaimana saya bisa mengatur tanggal ke NULL di Yii?

  4. codeigniter :mendapatkan data antara dua tanggal di mysql menggunakan php

  5. Hibernate:constraintName adalah null di MySQL