Ik heb dit script gebruikt om een MySQL-database van latin1 om te zetten naar utf8mb4
https://gist.github.com/pobegov/f8b293fb6eb658a13feb1c318e6c07ed
Het leek echt briljant, en het script wordt gewoon uitgevoerd, echter zijn alle latin1 tekens, zoals ë,á,û en € omgezet naar vraagtekens, zoals hiernaast: ?,?,? en ?. (zonder de ruitjes eromheen).
Wat gaat er mis? Het gaat bij het omzetten ergens al mis, want het staat uiteindelijk misvormd in mijn database. Dus aan de encoding van het script, evenals de PHP charset-functie in mysqli zal het niet liggen.
Uit de output die het script gaf, kwamen deze queries:
ALTER TABLE `news` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
UPDATE IGNORE `news` SET `title` = CONVERT(BINARY(CONVERT(`title` USING latin1)) USING utf8mb4), `message_short` = CONVERT(BINARY(CONVERT(`message_short` USING latin1)) USING utf8mb4), `message` = CONVERT(BINARY(CONVERT(`message` USING latin1)) USING utf8mb4), `auteur` = CONVERT(BINARY(CONVERT(`auteur` USING latin1)) USING utf8mb4), `bronurl` = CONVERT(BINARY(CONVERT(`bronurl` USING latin1)) USING utf8mb4), `bronnaam` = CONVERT(BINARY(CONVERT(`bronnaam` USING latin1)) USING utf8mb4)
Wat is er aan de hand?
PS: Gelukkig is dit een test, en is er geen echte data om zeep geholpen.