Fiz uma migração de servidor e estou fazendo uma auditoria. No novo servidor, finalmente tive a liberdade de atualizar o MariaDB para 10.11 (precisava do 10.10 para obter suporte ao Unicode 14.0) e anteriormente estava preso no suporte ao Unicode 5.2.
Eu acompanhei isso via print_r(mysqli_get_charset($db));
PHP. Depois de alterar o agrupamento do servidor ( SHOW VARIABLES LIKE '%coll%';
) tudo aparece corretamente como utf8mb4_uca1400_ai_ci
. Ainda não atualizei os bancos de dados ou tabelas, que estão todos parados, utf8mb4_unicode_520_ci
o que está bom por enquanto.
O problema é que print_r(mysqli_get_charset($db));
retorna utf8mb4_general_ci
. Então, investiguei iniciando minha instalação local do MariaDB, já que tenho o log de todas as consultas em execução. Quando você executa esse comando em PHP, ele se traduz na seguinte consulta:
SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME`='__database_name_here__';
Ok, então peguei essa consulta e executei-a no servidor ativo e obtive utf8mb4_unicode_520_ci
(de novo, tudo bem por enquanto). Por motivos não relacionados, reiniciei o servidor várias vezes, portanto isso não deve ser um problema de "preso na memória".
Então, onde está mysqli_get_charset($db)
o utf8mb4_general_ci
agrupamento para que eu possa atualizá-lo?
Preenchi um relatório de bug do PHP e, resumindo: eles têm uma matriz estática interna de conjuntos de caracteres como
utf8mb4_general_ci
substituto. Portanto, a maneira apropriada de obter as informações do conjunto de caracteres é por meio desta consulta: