हां, MySQL में ALTER TABLE ... CHANGE या MODIFY का उपयोग करके आप INTEGER कॉलम को VARCHAR में बदल सकते हैं बिना डेटा खोए, बशर्ते नया प्रकार मौजूदा डेटा को समायोजित कर सके।
उदाहरण तालिका बनाना
mysql> CREATE TABLE DemoTable (
UserId INT,
UserFirstName VARCHAR(20),
UserLastName VARCHAR(20),
UserAge INT
);
वर्तमान संरचना देखना
mysql> DESC DemoTable;
आउटपुट:
+---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | UserId | int(11) | YES | | NULL | | | UserFirstName | varchar(20) | YES | | NULL | | | UserLastName | varchar(20) | YES | | NULL | | | UserAge | int(11) | YES | | NULL | | +---------------+-------------+------+-----+---------+-------+
UserId को INT से VARCHAR(20) में बदलना
mysql> ALTER TABLE DemoTable CHANGE UserId UserId VARCHAR(20);
आउटपुट: Query OK, 0 rows affected (1.35 sec)
बदली हुई संरचना सत्यापित करना
mysql> DESC DemoTable;
आउटपुट:
+---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | UserId | varchar(20) | YES | | NULL | | | UserFirstName | varchar(20) | YES | | NULL | | | UserLastName | varchar(20) | YES | | NULL | | | UserAge | int(11) | YES | | NULL | | +---------------+-------------+------+-----+---------+-------+
महत्वपूर्ण विचार:
- डेटा संरक्षण: MySQL स्वचालित रूप से पूर्णांक को स्ट्रिंग प्रतिनिधित्व में बदल देता है (जैसे
123→'123')। कोई डेटा हानि नहीं होती। - आकार पर्याप्तता:
VARCHAR(20)अधिकांश पूर्णांकों के लिए पर्याप्त है (20 अंक तक)। बड़ेBIGINTके लिए अधिक आकार दें। - इंडेक्स प्रभाव: यदि कॉलम इंडेक्स्ड है, तो इंडेक्स पुनर्निर्मित होता है। प्रदर्शन प्रभावित हो सकता है (स्ट्रिंग तुलना संख्यात्मक से धीमी)।
NOT NULLकॉलम के लिएMODIFYका उपयोग करें:ALTER TABLE DemoTable MODIFY UserId VARCHAR(20) NOT NULL;
उलटा रूपांतरण (VARCHAR → INT): केवल तभी संभव जब सभी मान वैध पूर्णांक हों। अमान्य डेटा (जैसे 'abc') त्रुटि देगा।