Les points d'interrogation viennent de ceci :
- Le client a un caractère valide (bon), et
- Le
SET NAMES
est d'accord avec l'encodage que le client a (bon), mais - Le
CHARACTER SET
de la colonne cible n'inclut pas le caractère voulu (mauvais).
Exemples :
latin1
ne gère que les caractères d'Europe occidentale ; essayer de mettre un caractère d'Europe de l'Est ou tout autre caractère asiatique ne conviendra pas.latin2
etcp1250
peut gérer le tchèque, donc les conversions entre eux sont généralement correctes, mais pas entre l'un ou l'autre etlatin1
utf8mb4
est un sur-ensemble deutf8
.Mettre un caractère utf8 dans utf8mb4 est correct, mais l'inverse entraînera un '?' dans certains cas.
Les caractères qui ont été convertis en '?' ne peut pas être récupéré à partir de la table.
Comment réparer les futurs INSERTs
?
- Utiliser
utf8mb4
sur la ou les colonnes du tableau fonctionne probablement dans tous les cas. - Sinon, choisissez un
CHARACTER SET
pour la ou les colonnes du tableau qui correspondent raisonnablement aux données du client.
La raison pour laquelle seuls certains caractères sont ?
(en š?ž??
) est parce que šž
existent en latin1 mais pas les autres.
Conclusion :modifiez le CHARACTER SET
dans la définition de table.