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