Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डेटाबेस में बहुत पुरानी तिथियों को कैसे स्टोर करें?

दरअसल, आप कर सकते हैं यहां तक ​​कि दस्तावेज़ीकरण के बावजूद MySQL में वर्ष 1000 से कम की तारीखें स्टोर करें स्पष्टीकरण:

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

-आपको अभी भी वर्ष 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)

-और आप इसके साथ तारीख . के रूप में काम करने में सक्षम होंगे :

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. mysqli ने स्टेटमेंट तैयार किया num_rows 0 देता है जबकि क्वेरी 0 से अधिक रिटर्न करती है

  3. क्या मैं ALTER तालिका को पूर्ववत कर सकता हूँ - MySQL?

  4. MySQL पर टाइप बनाएं

  5. हाइबरनेट session.beginTransaction() कॉल और मैसकल स्टार्ट ट्रांजेक्शन