Olá
Estou em uma situação de migração da minha instância Etherpad. Migrei meu banco de dados e depois disso atualizei o Etherpad. Eu tenho isso saindo nos registros agora:
[2020-04-29 10:43:29.440] [ERROR] console - table is not configured with charset utf8mb4 -- This may lead to crashes when certain characters are pasted in pads
Não sei se isso pode causar erros ...
Então sim, isso geralmente é devido a bancos de dados / tabelas / esquemas configurados incorretamente, mas é um código novo e quero ter certeza de que está funcionando corretamente porque não tenho 100% de certeza que está.
Na verdade, é um problema do UeberDB, mas tanto faz, aqui está bom. A lógica aqui: https://github.com/ether/ueberDB/blob/master/mysql_db.js#L81
Vou supor que seu banco de dados Etherpad se chama etherpad_lite_db
. Se não estiver, substitua conforme o ajuste.
mysql -uroot -p
use etherpad_lite_db
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'etherpad_lite_db';
Próximo ... Copie / cole o comando final ..
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = 'etherpad_lite_db' AND T.table_name = 'store';
Copie e cole a saída.
Suas duas saídas devem ser
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8mb4 | utf8mb4_general_ci |
+----------------------------+------------------------+
e
| character_set_name |
+--------------------+
| utf8mb4 |
+--------------------+
Se não estiverem, seu banco de dados não foi configurado corretamente e certos caracteres _potencialmente_ quebrarão alguns pads em sua instância. Se você vir latim lá, você não deu nada e precisará executar esses comandos (acho [não testado]) ...
ALTER DATABASE `etherpad_lite_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
e
ALTER TABLE `store` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
Se eles não funcionarem, deixe-me saber.
Aqui está a saída para o primeiro comando:
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8mb4 | utf8mb4_general_ci |
+----------------------------+------------------------+
Tal era o seu desejo
E isso é para o segundo ...
| character_set_name |
+--------------------+
| utf8 |
+--------------------+
Ups…
O que eu posso fazer agora ?
desculpe, fui um pouco rápido sem ver o final da mensagem, vou testar a modificação do banco de dados agora.
Excelente! Funcionou.
Não há mais mensagens nos registros
Vencer. É ótimo ver meu trabalho / esforços validados então obrigado cara! :)
Obrigado por esses comandos! Um dos meus servidores tinha "latin1" aqui.
No entanto, eu certamente nunca disse ao etherpad para usar o latin1, por que o etherpad não é capaz de configurar adequadamente seu próprio banco de dados? A expectativa é que todo administrador tenha que configurar manualmente o conjunto de caracteres de cada banco de dados?
Obrigado por esses comandos! Um dos meus servidores tinha "latin1" aqui.
No entanto, eu certamente nunca disse ao etherpad para usar o latin1, por que o etherpad não é capaz de configurar adequadamente seu próprio banco de dados? A expectativa é que todo administrador tenha que configurar manualmente o conjunto de caracteres de cada banco de dados?
latin1
é o padrão no MySQL, ainda, em 2020. Isso não tem nada a ver com Etherpad!Acho que nossa abordagem aqui foi equilibrada e correta, mas posso entender se você se sentir um pouco frustrado por não ser clique e pronto! <3
Etherpad é capaz de configurar o banco de dados propriamente dito, mas optamos por não fazê-lo porque não queremos forçar utf8mb4 et al nos administradores, pois os administradores podem preferir outro conjunto de caracteres. Não somos DBAs.
Eu sou o administrador, mas não acho que posso decidir com qual conjunto de caracteres um aplicativo é executado - faz sentido deixar essa escolha para mim? Eu esperaria que a escolha errada apenas quebrasse o aplicativo. Eu não estou decidindo sobre o conjunto de caracteres da solicitação / respostas HTTP ou o conjunto de caracteres dos arquivos armazenados no sistema de arquivos.
Portanto, parece-me bastante estranho que caberia ao administrador decidir os detalhes internos de um aplicativo, como o conjunto de caracteres usado para o banco de dados. Você também não está deixando o esquema do banco de dados para mim. ;)
latin1 é o padrão no MySQL, ainda, em 2020. Isso não tem nada a ver com Etherpad!
Oh, eu vejo. Bem, isso é ... triste, eu acho? Parece que todos resolveram o problema do conjunto de caracteres atualmente mudando para utf8, exceto mysql ... :(
Portanto, por enquanto, a resposta parece ser "sim, espera-se que os próprios administradores configurem isso". Sei que essa é a situação no ecossistema mysql e não sua, eu só queria dar um feedback da perspectiva de um usuário. Ter um erro sobre isso nos logs é um ótimo começo, mas também não examino os logs em busca de erros regularmente, pois há muita coisa nos logs.
Talvez uma solução possível seria o etherpad alterar o banco de dados conforme apropriado por padrão, mas tem uma opção de configuração para desligar isso caso os DBAs desejem fazer uma escolha diferente? Isso evitaria a espingarda - foi por puro acaso que eu vi esse problema, normalmente eu nunca teria notado. Talvez eu seja ingênuo, mas espero que o número de administradores que desejam substituir essa escolha seja mínimo.
Anotado com agradecimento :)