Conversão do encode do MariaDB para atender o moodle 3.8
A nova versão do moodle precisa do encode utf8mb4 para codificação os emoticons, após a atualização da versão 3.2 para a 3.8, tive que rever as tabelas no mariadb.
Uma consulta simples para verificar a codificação das tabelas:
select table_schema,table_name,table_collation
from information_schema.TABLES where TABLE_SCHEMA='NOME_DO_BANCO';
E a rotina para converter as mais de 360 tabelas do moodle...
DELIMITER //
CREATE PROCEDURE convert_encode()
BEGIN
DECLARE _stmt CHAR(255);
DECLARE cmd CHAR(255);
DECLARE done BOOL DEFAULT 0;
DECLARE c1 CURSOR FOR
SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME,
' CONVERT TO CHARACTER SET "utf8mb4" COLLATE "utf8mb4_bin";')
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='NOME_DO_BANCO' ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN c1;
read_loop: LOOP
FETCH c1 INTO cmd;
IF done THEN
LEAVE read_loop;
END IF;
PREPARE _stmt FROM cmd;
EXECUTE _stmt;
DEALLOCATE PREPARE _stmt;
END LOOP;
CLOSE c1;
END;
//
DELIMITER ;
Mais um passo, para corrigir configurações:
php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
ainda no sql:
alter table mdl_user MODIFY COLUMN username varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
alter table mdl_user MODIFY COLUMN email varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
Uma consulta simples para verificar a codificação das tabelas:
select table_schema,table_name,table_collation
from information_schema.TABLES where TABLE_SCHEMA='NOME_DO_BANCO';
E a rotina para converter as mais de 360 tabelas do moodle...
DELIMITER //
CREATE PROCEDURE convert_encode()
BEGIN
DECLARE _stmt CHAR(255);
DECLARE cmd CHAR(255);
DECLARE done BOOL DEFAULT 0;
DECLARE c1 CURSOR FOR
SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME,
' CONVERT TO CHARACTER SET "utf8mb4" COLLATE "utf8mb4_bin";')
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='NOME_DO_BANCO' ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN c1;
read_loop: LOOP
FETCH c1 INTO cmd;
IF done THEN
LEAVE read_loop;
END IF;
PREPARE _stmt FROM cmd;
EXECUTE _stmt;
DEALLOCATE PREPARE _stmt;
END LOOP;
CLOSE c1;
END;
//
DELIMITER ;
Mais um passo, para corrigir configurações:
php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
ainda no sql:
alter table mdl_user MODIFY COLUMN username varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
alter table mdl_user MODIFY COLUMN email varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
Comentários
Postar um comentário