O índice exclusivo do MySQL não funciona em um determinado umlaut
-
29-09-2020 - |
Pergunta
Eu tenho uma tabela de usuários em que há uma coluna chamada 'apelido', UTF-8 codificou, VARCHAR (20), a tabela está em InnoDB.Há 2 registros um tem um apelido= 'gunni' e o outro apelido= 'günni'.Quando tentei aplicar um índice exclusivo nesta coluna, o MySQL me deu este erro:
.Erro 1062 (23000) na linha 263: entrada duplicada 'Gunni' para a chave 2
Eu verifiquei os dados Há apenas um registro que tem o nome 'gunni', e se eu alterar o registro 'günni' para outra coisa, aplique o índice exclusivo novamente, tudo funciona bem.
Como é que "Günni" e 'Gunni' sejam duplicados?Aqui estão os valores hexadecimais para eles, eu recebo isso com a função Hex () do MySQL:
.Gunni -> 67756E6E69
günni -> 67c3bc6e6e69
Eles são obviamente diferentes.Como mysql trata estes 2 como o mesmo?Ou há algo que eu não conheço índices exclusivos?Ou mesmo, isso poderia ser um bug mysql?
Solução
É por causa da aglutação que você está usando.
Qualquer coisa que tenha terminado com _CI seja insensível em maiúsculas de minúsculas (e também acentuado / UMLAUT insensível).Então sim, o MySQL considerará "Günni" e "Gunni" a mesma coisa, a menos que você mude sua aglutação.
docs: http://dev.mysql.com/doc / refman / 5.0 / en / charset-table.html