MySQL में किसी कॉलम का कैरेक्टर सेट (Character Set) और कोलेशन बदलना
सिंटैक्स:
ALTER TABLE yourTableName MODIFY yourColumnName column_type CHARACTER SET charset_name;
व्यावहारिक उदाहरण
1. टेबल बनाएं (डिफ़ॉल्ट utf8mb4):
mysql> CREATE TABLE setCharsetDemo (
-> FirstName VARCHAR(60)
-> );
Query OK, 0 rows affected (2.09 sec)
2. वर्तमान कैरेक्टर सेट जांचें:
mysql> SHOW CREATE TABLE setCharsetDemo;
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | setCharsetDemo | CREATE TABLE `setcharsetdemo` (`FirstName` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | +----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
डिफ़ॉल्ट: utf8mb4 कैरेक्टर सेट, utf8mb4_unicode_ci कोलेशन।
3. कैरेक्टर सेट को utf8 में बदलें:
mysql> ALTER TABLE setCharsetDemo
-> MODIFY FirstName VARCHAR(60) CHARACTER SET utf8;
Query OK, 0 rows affected, 1 warning (2.81 sec)
4. परिवर्तन वेरिफाई करें:
mysql> SHOW CREATE TABLE setCharsetDemo;
+----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | setCharsetDemo | CREATE TABLE `setcharsetdemo` (`FirstName` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
अब कॉलम CHARACTER SET utf8 और COLLATE utf8_general_ci दिखा रहा है।
महत्वपूर्ण बिंदु:
MODIFYकॉलम परिभाषा दोहराता है (टाइप, लंबाई, नया चारसेट)- टेबल का डिफ़ॉल्ट चारसेट (
DEFAULT CHARSET=utf8mb4) अपरिवर्तित रहता है - केवल निर्दिष्ट कॉलम प्रभावित होता है
- चेतावनी (warning) आ सकती है अगर डेटा ट्रंकेशन का जोखिम हो
सामान्य कैरेक्टर सेट:
| नाम | विवरण | अधिकतम बाइट्स/कैरेक्टर |
|---|---|---|
| utf8mb4 | पूर्ण यूनिकोड (इमोजी सहित) | 4 |
| utf8 | बेसिक मल्टीलिंगुअल प्लेन (BMP) | 3 |
| latin1 | पश्चिमी यूरोपीय भाषाएं | 1 |
| ascii | केवल ASCII | 1 |
कोलेशन (Collation) भी बदलें:
ALTER TABLE table_name MODIFY col_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
सावधानी:
- बड़े टेबल पर
ALTER TABLEलॉक लगा सकता है —pt-online-schema-changeया MySQL 8.0+ इंस्टेंट DDL विचार करें - मौजूदा डेटा नए चारसेट में कन्वर्ट होगा — बैकअप लें
- इंडेक्स की लंबाई सीमा (767 बाइट्स इननोडेब में) प्रभावित हो सकती है