सबसे सुरक्षित तरीका है कि कॉलम को पहले बाइनरी टाइप में संशोधित किया जाए और फिर वांछित वर्णसेट का उपयोग करके इसे वापस टाइप किया जाए।
प्रत्येक कॉलम प्रकार के अपने संबंधित द्विआधारी प्रकार निम्नानुसार हैं:
- चार => द्विवर्षीय
- TEXT => BLOB
- TINYTEXT => TINYBLOB
- MEDIUMTEXT => MEDIUMBLOB
- LONGTEXT => LONGBLOB
- वर्कर => वार्बिनरी
उदाहरण के लिए .:
ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME] MODIFY [COLUMN_NAME] VARBINARY;
ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME] MODIFY [COLUMN_NAME] VARCHAR(140) CHARACTER SET utf8mb4;
मैंने कई लेट 1 टेबलों में कोशिश की और इसने सभी डिक्टिटिक्स को रखा।
आप ऐसा करने वाले सभी कॉलम के लिए यह क्वेरी निकाल सकते हैं:
SELECT
CONCAT('ALTER TABLE ', TABLE_SCHEMA,'.', TABLE_NAME,' MODIFY ', COLUMN_NAME,' VARBINARY;'),
CONCAT('ALTER TABLE ', TABLE_SCHEMA,'.', TABLE_NAME,' MODIFY ', COLUMN_NAME,' ', COLUMN_TYPE,' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')
FROM information_schema.columns
WHERE TABLE_SCHEMA IN ('[TABLE_SCHEMA]')
AND COLUMN_TYPE LIKE 'varchar%'
AND (COLLATION_NAME IS NOT NULL AND COLLATION_NAME NOT LIKE 'utf%');
आपके द्वारा अपने सभी स्तंभों पर ऐसा करने के बाद आप इसे सभी तालिकाओं पर करते हैं:
ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
अपनी सभी तालिका के लिए इस क्वेरी को उत्पन्न करने के लिए, निम्नलिखित क्वेरी का उपयोग करें:
SELECT
CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_COLLATION NOT LIKE 'utf8%'
and TABLE_SCHEMA in ('[TABLE_SCHEMA]');
और अब जब आपने अपने सभी स्तंभों और तालिकाओं को संशोधित किया, तो डेटाबेस पर भी ऐसा ही करें:
ALTER DATABASE [DATA_BASE_NAME] CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci;
utf8_unicode_ci
, नहींutf8_general_ci
।