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

MySQL DATETIME को सम्मिलित करें:क्या ISO::8601 प्रारूप का उपयोग करना सुरक्षित है?

ऐसा लगता है कि इस प्रश्न का संक्षिप्त उत्तर "नहीं, यह सुरक्षित नहीं है" - यह निष्कर्ष MySQL शेल के साथ प्रयोगों की एक श्रृंखला का अनुसरण करता है। फिर भी अधिक "सैद्धांतिक" उत्तर की सराहना करेंगे, हालांकि...

स्पष्ट रूप से MySQL इंजन (डिफ़ॉल्ट रूप से) बहुत उदार है जो इसे sql_mode के साथ भी डेटाटाइम शाब्दिक के रूप में स्वीकार करता है। STRICT_ALL_TABLES पर सेट करें:न केवल विभिन्न विभाजक स्वीकार किए जाते हैं, वे भिन्न भी हो सकते हैं:

INSERT INTO t(dt) VALUES('2012-01,03.04:[email protected]'); -- Query OK, 1 row affected

इसके अलावा, यदि स्ट्रिंग बहुत छोटी है, तो यह शून्य से गद्दीदार हो जाएगी... लेकिन आश्चर्य हो सकता है:

INSERT INTO t(dt) VALUES('2012011'); -- 2020-12-01 01:00:00 is what's inserted

दुखद बात यह है कि स्ट्रिंग बहुत लंबी है (जब अंतिम पार्स करने योग्य अंक के बाद व्हाइटस्पेस के अलावा कुछ और होता है) को सख्त मोड में अमान्य मान माना जाएगा:

mysql> INSERT INTO t(dt) VALUES('2012-06-27T05:25Z');
ERROR 1292 (22007): Incorrect datetime value: '2012-06-27T05:25Z' for column 'dt' at row 1
mysql> INSERT INTO t(dt) VALUES('2012-06-27T05:25');
Query OK, 1 row affected (0.10 sec)

पारंपरिक मोड में पार्सिंग और भी अधिक आराम से होती है - लेकिन अधिक सटीक नहीं; इसके अलावा, सख्त मोड में गलत माने जाने वाले स्ट्रिंग्स 'मूक चेतावनियां' देंगे, हालांकि ऑपरेशन सफल होंगे:

mysql> INSERT INTO t(dt) VALUES('2012-06-27T05:25Z');
Query OK, 1 row affected, 1 warning (0.10 sec)

mysql> SHOW WARNINGS;
+---------+------+---------------------------------------------+
| Warning | 1264 | Out of range value for column 'dt' at row 1 |
+---------+------+---------------------------------------------+

mysql> SELECT dt FROM t;
+---------------------+
| dt                  |
+---------------------+
| 2012-06-27 05:25:00 |
+---------------------+

निचली पंक्ति यह है कि हमें कुछ डीएएल-संबंधित कोड को फिर से लिखना पड़ा ताकि तिथियां (और डेटाटाइम) हमेशा "सामान्यीकृत" रूप में डीबी को भेजी जा सकें। मुझे आश्चर्य है कि हमें ऐसा क्यों करना है, न कि Zend_Db डेवलपर्स। लेकिन यह एक और कहानी है, मुझे लगता है। )



  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. GUI का उपयोग करके MySQL वर्कबेंच में डेटाबेस कैसे बनाएं?

  3. MySQL ट्यूटोरियल - अपने MySQL सर्वर पर एसएसएल को कॉन्फ़िगर और प्रबंधित करना

  4. mysql डेटाबेस में बड़े CSV आयात करना

  5. Howto:एक mysql InnoDB स्टोरेज इंजन को साफ करें?