sql >> Databáze >  >> RDS >> Mysql

Jak uložit velmi stará data do databáze?

Vlastně můžete data uložení pod rok 1000 v MySQL navzdory dokonce dokumentaci upřesnění:

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

-stále musíte zadat rok ve formátu 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)

-a budete s tím moci pracovat jako datum :

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

Co se týče bezpečnosti. Nikdy jsem se nesetkal s případem, kdy by to v MySQL 5.x nefungovalo (to ovšem neznamená, že to bude 100% fungovat, ale alespoň je to s určitou pravděpodobností spolehlivé)

O datech před Kristem (pod Kristem). Myslím, že je to jednoduché – v MySQL to žádný způsob neexistuje ukládat i záporná data. Tj. rok budete muset uložit samostatně jako pole celého čísla se znaménkem:

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 myslím si, že v každém případě (pod/nad rokem 0) je v takovém případě lepší ukládat části data jako celá čísla – toto nebude záviset na nezdokumentované funkci. Budete však muset pracovat s těmito 3 poli, nikoli s daty (takže to v určitém smyslu není řešením vašeho problému)



  1. Jak naplnit tabulky zón v databázi mysql v ubuntu pomocí xampp

  2. SQLite unie

  3. Vyhýbání se řazení pomocí zřetězení sloučení spojení

  4. Přejmenujte sloupec v MySQL