Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

Schema Charset Normalizer (Magento 2)

Corrige um falso-positivo comum do declarative schema do Magento 2: divergências de charset/collation causadas por aliases, não por diferenças reais no banco.

O problema

Em muitas instalações Magento — principalmente depois de migrações de host, restauração de dumps antigos, ou upgrade de versão do MySQL/MariaDB — o banco reporta utf8 enquanto a declaração do Magento resolve para utf8mb3 (ou vice-versa). Para o MySQL isso é o mesmo charset. Para o comparador de schema do Magento, são duas strings diferentes, e ele marca a tabela como "alterada" em toda execução.

Sintomas típicos:

  • bin/magento setup:upgrade demorando muito mais do que deveria, porque o comparador recalcula diffs em centenas de tabelas a cada deploy.
  • bin/magento setup:db:status nunca retorna "up to date", mesmo sem nenhuma mudança real de schema pendente.

Como funciona

O módulo registra um plugin beforeCreate em Magento\Framework\Setup\Declaration\Schema\Dto\Factories\Table, a factory usada tanto para montar o DTO da tabela a partir da declaração (XML) quanto a partir da introspecção do banco real. Antes do DTO ser criado, ele normaliza charset/collation para uma forma canônica, usando um mapa de aliases conhecidos — eliminando o ruído antes que o comparador veja a diferença.

Instalação

composer require alekhine-dev/module-schema-charset-normalizer
bin/magento module:enable AlekhineDev_SchemaCharsetNormalizer
bin/magento setup:upgrade

Configuração / extensão

Os aliases padrão cobrem o caso mais comum (utf8 → utf8mb3). Se seu ambiente tiver outros aliases legados, adicione-os via di.xml do seu próprio módulo — não é necessário alterar esta classe:

<type name="AlekhineDev\SchemaCharsetNormalizer\Plugin\NormalizeCharsetCollationPlugin">
    <arguments>
        <argument name="charsetAliases" xsi:type="array">
            <item name="utf8" xsi:type="string">utf8mb3</item>
            <item name="latin1" xsi:type="string">latin1</item>
        </argument>
    </arguments>
</type>

O que este módulo não faz

Ele não altera nada no banco de dados. Ele só normaliza como o Magento compara charset/collation durante o setup:upgrade/setup:db:status. Outras divergências reais de schema (tipo de coluna, tamanho, unsigned, auto_increment, índices, etc.) continuam sendo detectadas normalmente — e continuam exigindo uma decisão caso a caso sobre corrigir ou não.

Licença

MIT — veja LICENSE.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages