मेरे पास एक MySQL डेटाबेस है जो व्यवहार प्रदर्शित कर रहा है मैं बेहतर समझना चाहता हूं। मैं एक आईएनटी फ़ील्ड में डाले गए चार्ज वैल्यू की खोज क्यों कर सकता हूं? मेरे पास एक ऐसा क्षेत्र है जो आईएनटी प्रकार का है लेकिन ऐसा लगता है कि यह चरित्र मूल्यों को रिकॉर्ड करने में सक्षम है, यह कैसे संभव है?आप अक्षरों को एक MySQL int फ़ील्ड में क्यों सम्मिलित कर सकते हैं?
मैंने आईएनटी और वचरर के साथ डेटाबेस बनाकर इस मुद्दे को अलग करने की कोशिश की। मैंने आईएनटी वैल्यू में "टेस्ट 1" डाला लेकिन आईडी स्ट्रिंग वैल्यू का उपयोग कर पंक्ति की तलाश में अभी भी सक्षम था। आईडी मान में स्ट्रिंग डालने के बाद चेतावनी
| Warning | 1366 | Incorrect integer value: 'TEST1' for column 'ID' at row 1 |
लेकिन मैं अभी भी उस मान को खोजने में सक्षम था। मैं समझना चाहता हूं कि यह क्यों संभव है।
mysql> CREATE TABLE test1(ID int, DATA varchar(255));
Query OK, 0 rows affected (0.18 sec)
mysql> INSERT INTO test1(ID,DATA) VALUES('TEST1', 'TEST1');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SELECT * FROM test1 WHERE ID = 'TEST1';
+------+-------+
| ID | DATA |
+------+-------+
| 0 | TEST1 |
+------+-------+
1 row in set, 1 warning (0.00 sec)
चेतावनी चयन करने के बाद
| Warning | 1366 | Incorrect integer value: 'TEST1' for column 'ID' at row 1 |
है, लेकिन परिणाम अभी भी सही है।
मैं उपरोक्त चयन को 0 परिणाम खोजने की अपेक्षा करता हूं, लेकिन ऐसा नहीं है, क्यों?
उत्तर:
पेका की टिप्पणी जवाब अब स्पष्ट लगता असफ़ के नीचे इस सवाल का जवाब और की मदद से।
आईएनएसईआरटी के दौरान, MySQL चरित्र मूल्य को एक आईएनटी फ़ील्ड में सम्मिलित करने में असफल रहा, इसलिए इसे 0 के साथ बदल दिया गया। वही बात चयन के दौरान हुई, इसलिए असल में मैं किसी भी चरित्र मूल्य के लिए आईडी = 0 पर एक चयन कर रहा था। खोज रहा था
mysql> SELECT * FROM test1 WHERE ID = 'SOMETHING_OTHER_THAN_TEST1';
+------+-------+
| ID | DATA |
+------+-------+
| 0 | TEST1 |
+------+-------+
1 row in set, 1 warning (0.00 sec)
एक ही परिणाम देता है वह मेरी प्रारंभिक चयन के रूप में के बाद से यह वास्तव में के रूप में
SELECT * FROM test1 WHERE ID = 0;
बैकएंड में
चल रहा है।
किसी भी मामले में सबसे अच्छा अभ्यास MySQL कॉन्फ़िगरेशन फ़ाइल या SQL कथन में sql_mode = 'STRICT_ALL_TABLES' का उपयोग करना प्रतीत होता है।
एक MySQL सर्वर पर सभी एसक्यूएल प्रश्नों आप अपने my.cnf फ़ाइल जो आम तौर पर /etc/my.cnf
[mysqld]
...
...
...
sql-mode=STRICT_ALL_TABLES
आप MySQL जारी '1 warning' आपकी क्वेरी को निष्पादित नोटिस किया .. शायद यह जानना अच्छा है कि यह क्या है ...? – Romain
मैंने चेतावनी के परिणामों के साथ प्रश्न अद्यतन किया, लेकिन परिणाम अभी भी सही है, जो मैं सोच रहा हूं। –