Votre "problème" est le utf8_unicode_ci
collation. Cette collation fait des "expansions de caractères", ce qui signifie que les trémas et leurs caractères de base sont traités comme le même même dans un =
comparaison :
A = Ä
O = Ö
...
Le deuxième exemple sur cette page de manuel mySQL explique le problème :9.1.7.8. Exemples de l'effet du classement
Ce que vous auriez à faire est soit de passer à un classement qui fait la distinction entre le tréma et le caractère de base (par exemple, utf8_general_ci
ou utf8_general_bin
) ou passer à un classement différent uniquement lors de la comparaison :
select * from users where username like 'Björn' COLLATE utf8_general_ci;
c'est évidemment plus lent, car la conversion du classement doit être effectuée pour chaque enregistrement lors de la requête.