Valeur de chaîne incorrecte : « \xF0\x9F... » pour la colonne
Quelqu'un avait un emoji dans son nom et votre base ne peut pas stocker les emojis.
Faites d'abord ceci
Votre base et sa connexion doivent utiliser utf8mb4. C'est un changement à faire une seule fois.
Ce que ça veut dire
Un caractère a été écrit que le jeu de caractères de la colonne ne peut pas représenter. La séquence d'octets du message qui commence par \xF0\x9F est un emoji : quatre octets, alors que le vieux utf8 de MySQL est un encodage sur trois octets qui ne peut pas les stocker.
Ce qui la provoque
Classé par fréquence : la cause la plus probable en premier.
- 1
Un emoji dans un nom de joueur ou un message de chat
La forme la plus courante, de loin. Les noms Discord et Steam en sont pleins.
- 2
La base est en utf8 et non en utf8mb4
L'
utf8de MySQL a toujours été un UTF-8 partiel.utf8mb4est le vrai. - 3
Le jeu de caractères de la connexion n'est pas défini
La table peut être en utf8mb4 et la CONNEXION rester en utf8, et cela échoue pareil. C'est celle que tout le monde rate.
- 4
Du texte accentué ou CJK dans une colonne latin1
Un schéma plus ancien qui n'a jamais été migré.
Comment savoir laquelle est la vôtre
SHOW VARIABLES LIKE 'character_set_%'; SHOW FULL COLUMNS FROM users;
Si la colonne annonce utf8mb4 mais la connexion utf8, le problème est la chaîne de connexion.
Où regarder
La chaîne de connexion dans server.cfg, et le jeu de caractères de la table.
Comment la corriger
Réglez les deux. La connexion d'abord, car c'est la moitié qu'on oublie :
set mysql_connection_string "mysql://user:pass@host/db?charset=utf8mb4"
Puis le schéma :
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Toujours bloqué sur votre propre code ?
Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.
bug_reportOuvrir le Server FixerPour ce type d'erreur, le Script Optimizer repère les motifs de requête à l'origine de ceci.