Estou criando um novo servidor com a ferramenta mysql_install_db. Ele define o datadir, porta, senha, serviço etc. corretos. Mas meu problema é que o conjunto de caracteres e o agrupamento de minhas tabelas base estão errados. Eles precisam ser utf8mb4 e utf8mb4_general_ci.
Não consigo encontrar uma maneira de alterar essas tabelas com a instalação. Quando altero my.cnf/my.ini, ele muda apenas para bancos de dados recém-criados. Mas como mysql_install_db cria os bancos de dados do sistema, eles são criados incorretamente.
Também parece que meu msyql_install_db.exe não aceita um argumento de arquivo padrão.
Outra coisa também é estranha. Se eu executar o comando para criar um novo banco de dados, ele também usará utf8mb3 enquanto eu defino explicitamente COLLATE como utf8mb4_unicode_ci.
CREATE DATABASE IF NOT EXISTS tt DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
Estou usando o mariadb 10.6.4, que é a versão mais recente.
Alguém sabe como configurar o conjunto de caracteres e agrupamento corretos nos bancos de dados do sistema?
Tools\mariadb-winx64\bin\mysql_install_db.exe --datadir="Tools\mariadb-data" --password=PASSWORD --port=8137 --service=MyDB
[Atualizar]
Tentei configurar my.cnf com o seguinte, mas parece não surtir efeito:https://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf
Também tentei usar uma maneira diferente com inicialização insegura, mas também os mesmos resultados. Criei um my.cnf com a codificação correta, mas ainda obtive a codificação de tabela errada:
mariadb-winx64\bin\mariadbd.exe --defaults-file=./my.cnf --initialize-insecure --datadir=./Test
E meu.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
skip-grant-tables
port = 5137
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
Responder1
Não se preocupe com as tabelas geradas pelo sistema ( information_schema
, etc). Qualquer tentativa de modificá-los pode levar a sérios problemas.
É verdade que faz sentido que sejam utf8mb4, não utf8mb3. Mas deixe essa conversão para os desenvolvedores do MySQL e MariaDB consertarem (algum dia).
Istoéprovavelmente melhor paraseutabelas e conexões devem ser utf8mb4. Mas você tem controle sobre eles.