7/9/2020

Databank lettertekenset (Collation)

Filed under: — cybrarian @ 10:59 am

Als ik in een huidige databank (mariadb) kijk met phpMyAdmin, zie ik op het hoogste niveau “databases” de namen van mijn databanken, en daarnaast de colom “Collatie”. Daar staat bij de meeste databanken utf8_general_ci. (zie ook Databank collation) Er is één uitzondering, en dat is de database “mysql” (van het systeem zelf). Die heeft als collation: “utf8mb4_general_ci”. Waarom?

Een artikel uit 2016 hier op Medium.com geeft daar een antwoord op, en als het klopt zou ik ook meestal utf8mb4 moeten gebruiken, en al mijn bestaande databanken moeten omzetten.

MariaDB is afgeleid van MySQL, en daar hebben ze ooit een zuinige vorm van Unicode tekenset gemaakt en die “utf8” genoemd. Helaas bleek die achteraf niet overeen te komen met de uitgewerkte UTF-8 standaard, en MySQL kon zijn eigen versie niet meer aanpassen omdat ze te weinig plaats hadden voorzien in hun opslagruimte daarvoor (3 bytes/letter ipv 4). Hun onvolledige “utf8” veranderen zou bestaande programma’s kunnen doen crashen, en het enige wat hen restte was een andere vorm van utf8 bij te maken: utf8mb4.

Daardoor heb je nu zowel “utf8_general_ci” als “utf8mb4_general_ci” (ook wel “Unicode UCA 4.0.0).
ps: CI staat voor Case Insensitive (niet hoofdlettergevoelig, een zoek op “Abc” levert ook “abc” op).
En ook utf8mb4_bin, utf8mb4_(taalcodes)
ps: bin = wel hoofdlettergevoelig, dus Abc en abc verschillen voor de databank.

bron: https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434

Powered by WordPress