ডেভিড হুইটেকার যা পোস্ট করেছেন তাতে যুক্ত করে আমি এমন একটি কোয়েরি তৈরি করেছি যা সম্পূর্ণ টেবিল এবং কলামগুলিকে পরিবর্তনের বিবরণ তৈরি করে যা প্রতিটি টেবিলকে রূপান্তরিত করে। এটি চালানো ভাল ধারণা হতে পারে
সেট সেশন গ্রুপ_ক্যাঙ্ক_ম্যাক্স_লেন = 100000;
প্রথম নিশ্চিত করুন যে আপনার গ্রুপ CONCAT খুব ছোট সীমা ওভার যেতে না হিসাবে দেখা করতে এখানে ।
SELECT a.table_name, concat('ALTER TABLE ', a.table_schema, '.', a.table_name, ' DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci, ',
group_concat(distinct(concat(' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ', if (is_nullable = 'NO', ' NOT', ''), ' NULL ',
if (COLUMN_DEFAULT is not null, CONCAT(' DEFAULT \'', COLUMN_DEFAULT, '\''), ''), if (EXTRA != '', CONCAT(' ', EXTRA), '')))), ';') as alter_statement
FROM information_schema.columns a
INNER JOIN INFORMATION_SCHEMA.TABLES b ON a.TABLE_CATALOG = b.TABLE_CATALOG
AND a.TABLE_SCHEMA = b.TABLE_SCHEMA
AND a.TABLE_NAME = b.TABLE_NAME
AND b.table_type != 'view'
WHERE a.table_schema = ? and (collation_name = 'latin1_swedish_ci' or collation_name = 'utf8mb4_general_ci')
GROUP BY table_name;
পূর্ববর্তী উত্তরের মধ্যে একটি পার্থক্য হ'ল এটি ut8mb4 এর পরিবর্তে utf8 ব্যবহার করছিল এবং t1.data_type ব্যবহার করে t1.CHARACTER_MAXIMUM_LENGTH এনমগুলির পক্ষে কাজ করে না। এছাড়াও, আমার কোয়েরি দর্শনগুলি বাদ দেয় না কারণ সেগুলি পৃথকভাবে পরিবর্তন করতে হবে।
এই সমস্ত পরিবর্তনগুলি অ্যারে হিসাবে ফিরিয়ে দেওয়ার জন্য আমি কেবল একটি পার্ল স্ক্রিপ্ট ব্যবহার করেছি এবং তাদের উপরে পুনরাবৃত্তি করেছি, কলামগুলি দীর্ঘায়িত করা হয়েছে (সাধারণত তারা বর্ণচর (256) ছিল যখন তথ্যগুলিতে সাধারণত 20 অক্ষর থাকে তাই এটি ছিল একটি সহজ সমাধান) )।
আমি দেখেছি যে ল্যাটিন 1 -> utf8mb4 থেকে পরিবর্তন করার সময় কিছু ডেটা দূষিত হয়েছিল। এটি কলামগুলিতে utf8 এনকোডেড ল্যাটিন 1 অক্ষর রূপান্তরিত হয়ে যাবে। আমি যে কলামগুলি জানতাম তা কেবল পরিবর্তকের আগে এবং পরে মেমরিতে একটি সমস্যা হতে চলেছে এবং তাদের তুলনা করে এবং ডেটা ঠিক করার জন্য আপডেট বিবৃতি উত্পন্ন করেছিল generated