Erro importação vabulário controlado

Olá @elias.machado tudo bem? Essa é uma situação bem interessante vou me aventurar aqui para tentar explicar.

A primeira coisa que temos que ter em mente é que não podemos ter dois termos de uma taxonomia em um mesmo nível (termos irmão por assim dizer), no seu caso especifico temos dois valores especiais:
Maca e Maça que o banco de dados julga serem termos iguais… de primeira a gente pensa: não, esses caras são diferentes. Mas pois bem… o mysql tem algumas forma de fazer a comparação de valores, entre elas tem algumas configurações de como ele faz a comparação, em alguns casos por exemplo não há distinção entre letras maiúsculas e minúsculas, acentuadas ou não, dessa forma as palavras maca = maça = Maca = máçá = …

Algumas referencias que me ajudaram a entender melhor esse cenário:

https://dev.mysql.com/doc/refman/5.7/en/charset-binary-collations.html
https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html

Basicamente para resolver essa questão é necessário verificar o “COLLATE” que está sendo usado no mysql e alterar para algum tipo que tenha a comparação desejada. nem sempre isso é uma tarefa trivial:

Um exemplo pratico:

tenho a seguinte lista de termos apresentando o mesmo erro:

faço o seguinte teste consultando na base os valore “maca” e “maça”:

teoricamente ele deveria me retornar algum resultado apenas no primeiro teste e vazio no segundo, na pratica isso não acontece:

vou e altero o CHARACTER SET e o COLLATE da coluna name da tabela wp_terms:

e executo novamente o teste:
dd4

E após fazer isso é possível incluir o termo maça, pois o COLLATE “utf8mb4_bin” faz um comparação binária diferenciando ç do c

Não sei se consegui explicar bem, recomendo fortemente que você leia um pouco ali os links que mandei e veja quais as diferenças entre esses cara e suas restrições, nem sempre alterar entre os CHARACTER SET vai ser possível pois pode trucar alguns caracteres .

Att!

1 curtida