Eu tenho um aplicativo legado executando o MariaDB 10.5 com algumas opções de design de banco de dados ruins (por exemplo, valores financeiros armazenados como VARCHAR(50)) que estou tentando melhorar.
Por exemplo, posso alterar uma coluna total_amount VARCHAR(50) para um DECIMAL mais sensato com:
ALTER TABLE orders MODIFY total_amount DECIMAL(12, 2);
No entanto, quando faço isso, às vezes recebo avisos como o seguinte:
Data truncated for column 'total_amount' at row 120058
Como eles não aparecem até depois de executar a consulta ALTER TABLE, não posso verificar se o truncamento é importante ou não. Por exemplo, se houver um espaço em branco à direita que foi removido, tudo bem, mas se o valor numérico foi alterado, esse é um problema importante. A grande maioria das linhas são modificadas sem problemas, mas preciso verificar todas as linhas que geram um aviso.
Existe uma maneira de perguntar ao MariaDB: 'se eu executasse este comando ALTER TABLE, quais linhas mudariam e quais seriam os valores antes e depois nessas linhas'? Muitos outros softwares têm uma opção de 'dry run' que me permite fazer isso, por exemplo, posso executar o rsync com --dry-run e ele me dirá quais arquivos ele transferiria, mas não os transferiria.
Sei que poderia criar um clone da tabela, ALTER o clone, comparar com o original e excluir o clone, mas se houver uma maneira mais fácil de fazer isso, economizaria muito esforço.
Encontre o valor nessa linha. Talvez tenha não dígitos; talvez seja maior que 999999999,99; talvez outra coisa. Enquanto isso, confira o restante dos valores; Não tenho certeza se o ALTER pode fazer o que você está pedindo.
Uma vírgula em vez de ponto:
Arredondamento silencioso: