Change all field collation in MySQL database

collation
convert
character
set
mysql

#1

MySQL ашигладаг нэгэн системээ шинэ хувилбар руу шилжүүлсний дараагаар хайлт дээр

General error: 1267 Illegal mix of collations (utf8_bin,NONE) and (binary,COERCIBLE) for operation

алдаа гарч ажиллахгүй байв. Тиймээс collation той холбоотой алдаа бололтой хэмээн таамаглаж query-д ашиглагдаж буй хүснэгтүүдийг харьцуулж үзэхэд зарим нь utf8_general_ci, шинэ нүднүүд харин utf8_unicode_ci байхыг анзаарснаар баазын 160 орчим хүснэгтийг хэрхэн нэг бүрчлэн автоматаар засварлах талаар судлаж дараах кодыг ашиглан амжилттай хөрвүүлэв. Үүний дараагаар өмнөх алдаа арилж хайлт сайхан ажиллаж эхэллээ.

delimiter //

DROP PROCEDURE IF EXISTS convert_database_to_utf8 //

CREATE PROCEDURE convert_database_to_utf8()
BEGIN
    DECLARE table_name VARCHAR(255);
    DECLARE done INT DEFAULT FALSE;

    DECLARE cur CURSOR FOR
        SELECT t.table_name FROM information_schema.tables t WHERE t.table_schema = DATABASE() AND t.table_type='BASE TABLE';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;
        tables_loop: LOOP
            FETCH cur INTO table_name;

            IF done THEN
                LEAVE tables_loop;
            END IF;
-- Энэ хэсэгт хааш хөрвүүлэхээ тохируулж өгнө.
            SET @sql = CONCAT("ALTER TABLE ", table_name, " CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci");
            PREPARE stmt FROM @sql;
            EXECUTE stmt;
            DROP PREPARE stmt;
        END LOOP;
    CLOSE cur;
END //

delimiter ;
call convert_database_to_utf8();

Туршсан хувилбар: MySQL 5.7