MySQL में स्ट्रिंग और पूर्णांक की तुलना करने पर त्रुटि नहीं होती; MySQL स्ट्रिंग को स्वचालित रूप से संख्या में बदल देता है। यह अप्रत्याशित परिणाम दे सकता है।
टेबल बनाएं
mysql> CREATE TABLE DemoTable1852 (
Value1 VARCHAR(20),
Value2 INT
);
डेटा डालें
mysql> INSERT INTO DemoTable1852 VALUES('1John', 1);
mysql> INSERT INTO DemoTable1852 VALUES('John', 1);
mysql> INSERT INTO DemoTable1852 VALUES('1', 1);
mysql> INSERT INTO DemoTable1852 VALUES('John1', 1);
तुलना करें
mysql> SELECT Value1, Value2, Value1 = Value2 AS Result FROM DemoTable1852;
आउटपुट:
+--------+--------+--------+ | Value1 | Value2 | Result | +--------+--------+--------+ | 1John | 1 | 1 | | John | 1 | 0 | | 1 | 1 | 1 | | John1 | 1 | 0 | +--------+--------+--------+ 3 warnings
कैसे काम करता है
'1John'→ अग्रणी अंक1पढ़ता है, बाकी अनदेखा →1→ मेल खाता है (चेतावनी: ट्रंकेटेड)।'John'→ कोई अग्रणी अंक नहीं →0→ मेल नहीं खाता।'1'→1→ मेल खाता है।'John1'→ अग्रणी अंक नहीं →0→ मेल नहीं खाता।
चेतावनी देखें
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: '1John' | | Warning | 1292 | Truncated incorrect INTEGER value: 'John' | | Warning | 1292 | Truncated incorrect INTEGER value: 'John1' | +---------+------+----------------------------------------+
सर्वोत्तम अभ्यास
- स्पष्ट कास्ट उपयोग करें:
CAST(Value1 AS UNSIGNED) = Value2 - या दोनों को स्ट्रिंग में बदलें:
Value1 = CAST(Value2 AS CHAR) - सख्त SQL मोड सक्षम करें:
SET sql_mode = 'STRICT_ALL_TABLES'(फिर त्रुटि फेंकेगा)। - हमेशा तुलना से पहले डेटा प्रकार मिलान सुनिश्चित करें।