'ERROR 1366: Incorrect string value: '\xF0\x9F…' for column' komt door een kolom in utf8 (utf8mb3) die geen emoji aankan. Zo zet je tabel, kolom én verbinding om naar utf8mb4.
In MySQL is de oude tekenset utf8 eigenlijk utf8mb3: maximaal drie bytes per teken. Emoji en sommige andere tekens hebben er vier nodig. Probeer je die op te slaan, dan geeft de server Incorrect string value: '\xF0\x9F\x98\x80' for column 'bericht', of verandert het teken stilletjes in een vraagteken.
De oplossing is utf8mb4, en dan op drie plekken tegelijk: de kolom of tabel, de standaard van de database, en de verbinding tussen je applicatie en de server. Mist er één, dan blijft het misgaan.
Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Kijk welke tekenset en collatie er nu gebruikt worden.
SHOW CREATE TABLE berichten;
SHOW VARIABLES LIKE 'character_set%';Het omzetten herschrijft de tabel. Maak eerst een kopie.
mysqldump -u root -p --default-character-set=utf8mb4 databasenaam > voor-utf8mb4.sqlZet de standaard van de database en converteer de tabel. Kies een collatie die je server ondersteunt, bijvoorbeeld utf8mb4_unicode_ci.
ALTER DATABASE databasenaam CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE berichten CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;In PHP met PDO geef je de tekenset op in de DSN; bij mysqli met set_charset. In WordPress staat het in wp-config.php (DB_CHARSET).
<?php
$pdo = new PDO('mysql:host=localhost;dbname=databasenaam;charset=utf8mb4', $gebruiker, $wachtwoord);
// mysqli
$db->set_charset('utf8mb4');
// WordPress, wp-config.php
define( 'DB_CHARSET', 'utf8mb4' );Een index op een VARCHAR(255) in utf8mb4 kan bij oudere instellingen te groot worden. Zie Specified key was too long.
Let op: Zie je in de mysql-opdrachtregel een vraagteken waar een emoji hoort, controleer dan eerst met HEX(kolom) wat er echt is opgeslagen. Soms is de data goed en toont alleen de terminal het verkeerd.
Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
Het teken is al bij het opslaan omgezet, of de verbinding gebruikt een andere tekenset dan de tabel. Controleer alle drie de plekken.
Alle tabellen waarin gebruikers tekst invoeren, zeker. Doe het consequent, zodat joins tussen tabellen niet over verschillende collaties struikelen.
Het verschil is voor gewone websites niet merkbaar. Het belangrijkste is dat je data klopt.
Hulp nodig van een mens? Website-onderhoud · WordPress-support · Hosting en onderhoud · Alle oplossingen