Valor de string incorreto: '\xF0\x9F...' para a coluna
Alguém tinha um emoji no nome e o seu banco não consegue guardar emojis.
Faça isto primeiro
O seu banco e a conexão dele precisam usar utf8mb4. É uma mudança de uma vez só.
O que significa
Foi escrito um caractere que o conjunto de caracteres da coluna não consegue representar. A sequência de bytes da mensagem que começa com \xF0\x9F é um emoji: quatro bytes, e o velho utf8 do MySQL é uma codificação de três bytes que não consegue guardá-los.
O que causa isso
Ordenado pela frequência com que é a resposta.
- 1
Um emoji no nome de um jogador ou numa mensagem de chat
A forma mais comum, de longe. Os nomes do Discord e da Steam estão cheios deles.
- 2
O banco de dados é utf8 e não utf8mb4
O
utf8do MySQL sempre foi um UTF-8 parcial.utf8mb4é o de verdade. - 3
O conjunto de caracteres da conexão não está definido
A tabela pode estar em utf8mb4 e a CONEXÃO continuar em utf8, e falha do mesmo jeito. Essa é a que passa despercebida para todo mundo.
- 4
Texto acentuado ou CJK numa coluna latin1
Um esquema mais velho que nunca foi migrado.
Como saber qual é o seu
SHOW VARIABLES LIKE 'character_set_%'; SHOW FULL COLUMNS FROM users;
Se a coluna diz utf8mb4 mas a conexão diz utf8, o problema é a string de conexão.
Onde olhar
A string de conexão no server.cfg, e o conjunto de caracteres da tabela.
Como consertar
Coloque os dois. Primeiro a conexão, que é a metade esquecida:
set mysql_connection_string "mysql://user:pass@host/db?charset=utf8mb4"
E depois o esquema:
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ainda travado no seu próprio código?
Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.
bug_reportAbrir o Server FixerPara esse tipo de erro, o Script Optimizer detecta os padrões de consulta que causam isso.