mysql : jeux de caractères "utf8" ou "utf8mb4"


utf8 est l'ancienne implémentation défectueuse de MySQL d'UTF-8 qui est en train d'être obsolète.

utf8mb4 c'est ainsi qu'ils ont nommé leur implémentation UTF-8 fixe, et c'est ce que vous devriez utiliser maintenant.


Dans leur version défectueuse, seuls les caractères du premier plan de caractères de 64k - le plan multilingue de base - fonctionnent, les autres caractères étant considérés comme invalides. Les valeurs de point de code dans ce plan - 0 à 65535 (dont certaines sont réservées pour des raisons particulières) peuvent être représentées par des encodages multi-octets en UTF-8 jusqu'à 3 octets, et la première version de MySQL d'UTF-8 a arbitrairement décidé de fixer cela comme une limite. À aucun moment, cette limitation n'a été une interprétation correcte des règles UTF-8, car à aucun moment UTF-8 n'a été défini comme n'autorisant que jusqu'à 3 octets par caractère. En fait, les premières définitions d'UTF-8 le définissaient comme ayant jusqu'à 6 octets (depuis révisé à 4). La version originale de MySQL a toujours été arbitrairement paralysée.

À l'époque où MySQL l'a publié, les conséquences de cette limitation n'étaient pas trop graves car la plupart des caractères Unicode se trouvaient dans ce premier plan. Depuis lors, de plus en plus de plages de caractères nouvellement définies ont été ajoutées à Unicode avec des valeurs en dehors de ce premier plan. Unicode lui-même définit 17 plans, bien que jusqu'à présent, seuls 7 d'entre eux soient utilisés.

Dans un effort pour ne pas casser l'ancien code en faisant des hypothèses particulières, MySQL a conservé l'implémentation cassée et a appelé la nouvelle version corrigée utf8mb4. Cela a conduit à une certaine confusion, le nom étant mal interprété comme s'il s'agissait d'une sorte d'extension d'UTF-8 ou d'une forme alternative d'UTF-8, plutôt que de l'implémentation par MySQL du véritable UTF-8.

Les futures versions de MySQL finiront par supprimer progressivement l'ancienne version, et pour l'instant, elle peut être considérée comme obsolète. Dans un avenir prévisible, vous devez utiliser utf8mb4pour garantir un codage UTF-8 correct. Après un laps de temps suffisant, le courant utf8sera supprimé et, à une date ultérieure, utf8augmentera à nouveau, cette fois en référence à la version corrigée, mais utf8mb4continuera à se référer sans ambiguïté à la version corrigée.

sources : https://stackoverflow.com/questions/30074492/what-is-the-difference-between-utf8mb4-and-utf8-charsets-in-mysql

Stephane K
Il y'a 3 mois
Modifié
Il y'a 3 mois