Tegnsæt er en evig kilde til for tidlige grå hår hos udviklere, men med Unicode og UTF-8 burde det da efterhånden være nogenlunde til at gennemskue? Ikke helt, men vi nærmer os.
En udvikler hos konsulentfirmaet EverSQL måtte for nylig sande, at UTF-8 ikke altid var UTF-8 - i hvert fald når det gælder MySQL, skriver EverSQL i et blogindlæg.
For de uindviede er UTF-8 det tegnsæt, som bruges til at dække over tegn fra stort set alle alfabeter og understøtter også en lang række symboler og emojis. Men det optager plads. Helt bestemt fire bytes for hvert tegn, hvis man skal have det hele med.
Det har måske været årsagen til, at MySQL i sin tid valgte at kun at understøtte en delmængde af UTF-8 ved blot at bruge tre bytes i stedet for fire.
Problemet for konsulenten fra EverSQL var, at en kunde havde problemer med, at data slet ikke blev skrevet i databasen, selvom SQL-forespørgslen så rigtig ud. Både inputtet og tabellen i databasen var UTF-8, så det burde ikke have været tegnsættet, der var problemet, men fejlmeddelelsen antydede noget andet.
Nanveforvirring
MySQL havde som sagt implementeret UTF-8 med blot tre bytes, men når man konfigurerede tabellen i databasen, valgte man det stadig under navnet 'UTF-8'.
Senere har MySQL tilføjet et tegnsæt med fire bytes som blev kaldt utf8mb4, og det gamle tegnsæt skiftede sådan set også navn til utf8mb3. Men af hensyn til bagudkompatibiliteten var navnet 'UTF-8' i konfigurationen stadig det samme som utf8mb3.
Så når man som i dette tilfælde stod med en applikation, som sendte fire byte tegn til en tabel, der forventede op til tre bytes pr. tegn, så gik det galt.
Forvirringen hos EverSQL er ikke unik, hvis man ser på forskellige vejledninger til UTF-8 i MySQL på nettet. Den gode nyhed er, at med MySQL 8, som er på vej, bliver UTF-8 med fire bytes, utf8mb4, standardformatet i MySQL-tabeller, skriver MySQL's Morgan Tucker i et blogindlæg og et svar til EverSQL.
Samtidig vil utf8mb3 også blive sat som 'forældet', men vil stadig være understøttet af hensyn til bagudkompatibiliteten. Problemet er, at man skal genopbygge en tabel, hvis man skifter tegnsæt, både hvis man skifter fra Latin1, UTF-8 eller et andet tegnsæt til utf8mb4. Derfor vil mange foretrække at holde fast i tidligere tegnsæt.
Ifølge MySQL skulle der ikke være nogen problemer med ydelsen ved at skifte til det fire bytes-baserede utf8mb4.

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.
Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.
Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.
Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.