আমার একটি সমাধান রয়েছে যা কয়েকটি কমান্ড চালিয়ে ডাটাবেস এবং টেবিলগুলিকে রূপান্তর করবে। এছাড়া ধরনের সমস্ত কলাম পরিবর্তন করে varchar
, text
, tinytext
, mediumtext
, longtext
, char
। আপনার কিছু ডাটা ব্রেক হয়ে গেলে আপনার ডাটাবেসটিও ব্যাকআপ করা উচিত ।
নিম্নলিখিত কোডটি এমন একটি ফাইলকে অনুলিপি করুন যার নাম এটি preAlterTables.sql:
use information_schema;
SELECT concat("ALTER DATABASE `",table_schema,"` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;") as _sql
FROM `TABLES` where table_schema like "yourDbName" group by table_schema;
SELECT concat("ALTER TABLE `",table_schema,"`.`",table_name,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") as _sql
FROM `TABLES` where table_schema like "yourDbName" group by table_schema, table_name;
SELECT concat("ALTER TABLE `",table_schema,"`.`",table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type,"(",character_maximum_length,") CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",IF(is_nullable="YES"," NULL"," NOT NULL"),";") as _sql
FROM `COLUMNS` where table_schema like "yourDbName" and data_type in ('varchar','char');
SELECT concat("ALTER TABLE `",table_schema,"`.`",table_name, "` CHANGE `",column_name,"` `",column_name,"` ",data_type," CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",IF(is_nullable="YES"," NULL"," NOT NULL"),";") as _sql
FROM `COLUMNS` where table_schema like "yourDbName" and data_type in ('text','tinytext','mediumtext','longtext');
আপনি রূপান্তর করতে চান এমন ডাটাবেসটির সাথে "yourDbName" এর সমস্ত উপস্থিতি প্রতিস্থাপন করুন। তারপরে চালান:
mysql -uroot < preAlterTables.sql | egrep '^ALTER' > alterTables.sql
এটি আপনাকে ডাটাবেস রূপান্তর করতে হবে এমন সমস্ত প্রশ্নের সাথে alterTables.sql একটি নতুন ফাইল তৈরি করবে। রূপান্তর শুরু করতে নিম্নলিখিত কমান্ডটি চালান:
mysql -uroot < alterTables.sql
আপনি টেবিল_সেমার শর্তটি পরিবর্তন করে একাধিক ডাটাবেসগুলির মাধ্যমে চালানোর জন্য এটিকে মানিয়ে নিতে পারেন। উদাহরণস্বরূপ table_schema like "wiki_%"
নাম উপসর্গ সহ সমস্ত ডাটাবেস রূপান্তরিত হবে wiki_
। সমস্ত ডাটাবেস রূপান্তর করতে শর্তটি এর সাথে প্রতিস্থাপন করুন table_type!='SYSTEM VIEW'
।
একটি সমস্যা যে উত্থাপিত হতে পারে। মাইএসকিএল কীতে আমার কিছু বারচর (255) কলাম ছিল। এটি একটি ত্রুটি ঘটায়:
ERROR 1071 (42000) at line 2229: Specified key was too long; max key length is 767 bytes
যদি এটি ঘটে থাকে তবে আপনি কলামটি ভারচর (150) এর মতো ছোট আকারে পরিবর্তন করতে পারবেন এবং কমান্ডটি পুনরায় চালু করতে পারেন।
দয়া করে নোট করুন : প্রশ্নের উত্তরটিতে এই উত্তরটি ডাটাবেসকে utf8mb4_unicode_ci
পরিবর্তে পরিবর্তিত করে utf8mb4_bin
। তবে আপনি কেবল এটি প্রতিস্থাপন করতে পারেন।
mysql -uroot -pThatrootPassWord < alterTables.sql
কাজ করে। এবং যেমনটি আপনি ইতিমধ্যে লক্ষ করেছেন, utf8mb4_bin হ'ল অন্যান্যদের মধ্যে পরের ক্লাউড প্রস্তাব দেয়।