दरअसल, MySQL डिफ़ॉल्ट रूप से स्ट्रिंग्स को कॉलम की चौड़ाई में छोटा कर देता है। यह एक चेतावनी उत्पन्न करता है, लेकिन सम्मिलित करने की अनुमति देता है।
mysql> create table foo (str varchar(10));
mysql> insert into foo values ('abcdefghijklmnopqrstuvwxyz');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'str' at row 1 |
+---------+------+------------------------------------------+
mysql> select * from foo;
+------------+
| str |
+------------+
| abcdefghij |
+------------+
यदि आप सख्त SQL मोड सेट करते हैं, तो यह चेतावनी को एक त्रुटि में बदल देता है और सम्मिलन को अस्वीकार कर देता है।
अपनी टिप्पणी दें:SQL मोड एक MySQL सर्वर कॉन्फ़िगरेशन है। शायद यह पीडीओ नहीं है जो इसे पैदा कर रहा है, लेकिन दूसरी तरफ यह संभव है, क्योंकि कोई भी क्लाइंट अपने सत्र के लिए एसक्यूएल मोड सेट कर सकता है।
आप निम्न कथनों के साथ वर्तमान वैश्विक या सत्र sql_mode मान प्राप्त कर सकते हैं:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
डिफ़ॉल्ट एक खाली स्ट्रिंग होना चाहिए (कोई मोड सेट नहीं)। आप अपने my.cnf
. में SQL मोड सेट कर सकते हैं फ़ाइल, --sql-mode
. के साथ mysqld के लिए विकल्प, या SET
. का उपयोग करना बयान।
अद्यतन:MySQL 5.7 और बाद में डिफ़ॉल्ट रूप से सख्त मोड सेट करता है। देखें https://dev.mysql.com/doc/ refman/5.7/hi/sql-mode.html