Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да съхранявате много стари дати в база данни?

Всъщност вие можете съхранявайте дати под година 1000 в MySQL въпреки дори документацията уточнение:

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

- все още трябва да въведете година във формат ГГГГ:

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)

-и ще можете да работите с това като дата :

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

Колкото до безопасността. Никога не съм се сблъсквал със случай, когато това няма да работи в MySQL 5.x (това, естествено, не означава, че ще работи на 100%, но поне е надеждно с определена вероятност)

Относно датите преди Христа (под Христос). Мисля, че това е просто - в MySQL няма начин да съхранявате и отрицателни дати. т.е. ще трябва да съхраните годината отделно като цяло число със знак:

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)

Но мисля, че във всеки случай (под/над година 0) е по-добре да съхранявате части от дата като цели числа в този случай - това няма да разчита на недокументирана функция. Въпреки това ще трябва да работите с тези 3 полета, а не като датите (така че в известен смисъл това не е решение на проблема ви)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL за замяна с заместващ знак

  2. Връзката с базата данни MySQL не е затворена:какво ще се случи?

  3. MYSQL изход в дървовиден формат ИЛИ Добавяне на ниво (Родител-Дете)

  4. Python peewee save() не работи според очакванията

  5. PHP PDO:набор от знаци, имена на набори?