Base de données MySQL ignorant les espaces de fin d'un champ unique
Lors de la création d'une base de données avec un champ unique dans MySQL, on s'attend à ce que les valeurs contenant un début ou une fin les espaces doivent être traités comme distincts. Cependant, il a été observé que les espaces de fin sont supprimés lors de l'insertion, ce qui entraîne des erreurs de valeur en double lors de la tentative d'insertion de mots avec des espaces de fin variables.
Le problème sous-jacent réside dans le comportement de comparaison de chaînes par défaut de MySQL, qui ignore les espaces de fin. Par conséquent, l'index UNIQUE utilise une comparaison de chaînes standard, ce qui l'amène à ignorer les espaces de fin et à rejeter les insertions basées sur l'égalité des caractères.
Pour résoudre ce problème, une approche consiste à stocker les valeurs sous forme VARBINARY, ce qui préserve les espaces et permet la création d'index uniques qui respectent les espaces de fin. Bien que cela permette de stocker des valeurs avec des espaces variables, il est important de noter que le tri selon ces valeurs peut ne pas donner les résultats escomptés.
Une solution alternative consiste à utiliser les classements NO PAD de MySQL, qui ont été introduits dans MySQL 8.0. . Ces classements, tels que utf8mb4_0900_ai_ci, gèrent les comparaisons de chaînes sans ignorer les espaces de fin. En créant le champ unique avec un classement NO PAD, vous pouvez vous assurer que les valeurs avec différents espaces de fin sont traitées comme distinctes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!