Data omzetten van latin1 naar utf8mb4 geeft vraagtekens

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

17/01/2022 19:32:05
Quote Anchor link
Ik heb vraagtekens, en ik zie vraagtekens bij dit probleem.

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
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.
Gewijzigd op 17/01/2022 19:35:23 door - Ariën -
 
PHP hulp

PHP hulp

21/11/2024 11:54:12
 

17/01/2022 19:55:43
Quote Anchor link
Iemand op het forum heeft er een tutorial voor gemaakt, misschien hier ook van toepassing?
https://www.phphulp.nl/php/tutorial/php-algemeen/unicode-enzo/831/databases/2326/
 
- Ariën  -
Beheerder

- Ariën -

17/01/2022 23:47:07
Quote Anchor link
Ik ga morgen nog eens kijken naar dat genoemde stappenplan.
Ik kan je nu al vertellen dat ik (helaas) nooit een $mysqli->set_charset("latin1"); heb gebruikt of de vroegere variant. Mogelijk is dat dus fout gegaan bij de conversie queries uit de startpost.

Als iemand ervaring met het omzetten heeft, let me know.

Toevoeging op 18/01/2022 01:10:28:

Die simpele queries lijken wel goed te werken. Maar dan ben ik toch benieuwd waarom dat GitHub-script niet werkt, en allemaal vraagtekens neersmijt...???????
Iemand enig idee wat en hoe die precies mijn data vernachelt?
En onder welke omstandigheid had het dan wel gewerkt?

Ik ga die queries uit die tut in ieder geval even in dat conversiescript toevoegen.

Toevoeging op 18/01/2022 01:51:44:

Ook mooi leesvoer voor morgen....

http://fangorn.thijma.nl/news/latin1-vs-utf8

Thnx Thomas!
Gewijzigd op 18/01/2022 01:29:24 door - Ariën -
 

19/01/2022 10:38:07
Quote Anchor link
Ik heb er ook ervaring mee.
 
Ivo P

Ivo P

19/01/2022 12:19:32
Quote Anchor link
Dat script op github begint met de tekst:
" Convert MySQL Database (tables and data) to UTF8MB4, where UTF8 data stored via latin1 connection "

Dus specifiek: als er unicode data is opgeslagen via een verbinding die op Latin gedefinieerd stond. Daarbij heeft de database mogelijk bepaalde conversies uitgevoerd en dit script gaat nu proberen om dit te herstellen.

Maar, is dat precies wat jij fout gedaan hebt? Of heb jij Latin aangeboden over een Latin verbinding en die opgeslagen als Latin (dus eignelijk foutloos) en probeer je dat naar een Unicode variant om te zetten?
Dat zou namelijk wat anders zijn.
 
- Ariën  -
Beheerder

- Ariën -

19/01/2022 15:41:28
Quote Anchor link
Hm, daar heb je volgens mij groot gelijk in. :-)
Ik geef toe dat de werking/upgrade van latin1 (iso-8859-1) v.s. utf8 en de bijbehorende collaties soms best ingewikkelde materie is als je niet precies weet hoe het opgeslagen is. Tja, de data begint bij 2007, en sindsdien heb ik nooit aandacht gehad voor charactersets en collaties, en voorzover ik weet heb ik nooit wat daar mee gedaan in de tijden daarna.

Dan pas ik het script zo aan dat hij enkel de collatie/characterset van de tabellen omzet en de velden met rust laat. Dan zijn we er ook, net zoals in de tutorials.
Gewijzigd op 19/01/2022 15:42:53 door - Ariën -
 

19/01/2022 16:23:31
Quote Anchor link
Fijn dat de tutorial heeft geholpen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.