Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przechowywać bardzo stare daty w bazie danych?

Właściwie możesz przechowuj daty poniżej 1000 roku w MySQL, pomimo nawet dokumentacji wyjaśnienie:

mysql> describe test;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| birth | date    | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

- nadal musisz wpisać rok w formacie RRRR:

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)

- i będziesz mógł używać tego jako daty :

mysql> select birth + interval 5 day from test;                                                                              
+------------------------+                                                                                                   
| birth + interval 5 day |                                                                                                   
+------------------------+                                                                                                   
| 0995-03-10             |
+------------------------+
1 row in set (0.03 sec)

Jeśli chodzi o bezpieczeństwo. Nigdy nie spotkałem się z przypadkiem, w którym to nie zadziała w MySQL 5.x (to oczywiście nie oznacza, że ​​będzie działać w 100%, ale przynajmniej jest niezawodne z pewnym prawdopodobieństwem)

O datach pne (poniżej Chrystusa). Myślę, że to proste - w MySQL nie ma nie ma mowy do przechowywania dat ujemnych. Tj. będziesz musiał przechowywać rok oddzielnie jako podpisane pole liczb całkowitych:

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)

Ale myślę, że w każdym razie (poniżej/powyżej roku 0) lepiej przechowywać części dat jako liczby całkowite w takim przypadku - nie będzie to polegać na nieudokumentowanej funkcji. Jednak będziesz musiał operować tymi 3 polami, a nie datami (więc w pewnym sensie nie jest to rozwiązanie twojego problemu)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak połączyć się z MySQL 5.1 w Visual Studio 2010?

  2. Jak ClusterControl konfiguruje wirtualny adres IP i czego można się spodziewać podczas przełączania awaryjnego?

  3. Jak zmienić podciągi?

  4. Jak obsłużyć masowe przechowywanie rekordów w bazie danych w celu autoryzacji użytkowników?

  5. Prawidłowy sposób na utrzymanie aktywnych połączeń w puli (lub przerwanie ich i uzyskanie nowych) podczas dłuższej nieaktywności dla MySQL, aplikacji Grails 2