0

Jeux de caractères, Unicode et Base de données

twitterlinkedinmail
Introduction
Un caractère est un symbole ou un signe unique appartenant à un alphabet.
Le jeu de caractères est un ensemble de caractères à représenter.
Il existe plusieurs jeux de caractères, permettant de représenter différents alphabets du monde.

Le standard ASCII

Afin de répertorier tous les caractères, un standard a été mis en place.

Le premier standard qui voit le jour est l’ASCII.

Pour représenter des caractères dans un fichier texte, on associe un nombre (code) à une lettre, à un chiffre ou à un symbole.

L’encodage le plus connu de l’ASCII est US-ASCII.

A => 65 => 01000001

a => 97 => 01100001

Le codage est réalisé sur 7bits/octet soit

128 symboles possibles. Une trentaine d’entre eux sont des caractères de commande, le reste est constitué de l’alphabet anglais standard, des chiffres et des ponctuations.

L’extension la plus connue est la famille ISO-8859, permettant de représenter les caractères accentués. Le codage est réalisé sur un octet complet, soit 256 caractères possibles. Les codes de 160 à 255 sont affectés au codage des caractères latins accentués.

Standards ISO-8859-1 à 15

ISO-8859-1 puis 15 (euro): Europe de l’Ouest

ISO-8859-2: Europe Centrale ou de l’Est

ISO-8859-5: Cyrillique

ISO-8859-7: Grec

 

Les principaux problèmes rencontrés avec ce standard sont les suivants :

– On ne peut utiliser plusieurs langues à l’intérieur d’une même instance.

– Deux grands absents de l’ISO-Latin-1 sont la ligature oe « œ », essentielle à la typographie française correcte, et le symbole de l’euro « € ».

– Chaque constructeur d’ordinateur a aussi développé ses propres codes non conformes aux standards internationaux (IBM EBCDIC, Windows-1252,..)

L’unicode

La globalisation consiste à intégrer dans une même table tous les caractères connus du monde.

Le standard Unicode est un mécanisme universel de codage de caractères. Il définit une manière cohérente de coder des textes multilingues et facilite l’échange de données textuelles.

Il est un passage obligatoire pour la plupart des nouveaux protocoles de l’Internet, mis en œuvre dans tous les systèmes d’exploitation et langages informatiques modernes.

Formes de codage

Il existe plusieurs formes de codage de caractères pour l’Universal Character Set:

– UCS-2

– UCS-4

Cependant, les codages UCS-2 et UCS-4 sont difficiles à utiliser dans de nombreuses applications et protocoles qui travaillent avec des caractères codés sur 8 ou même 7 bits. Même certains systèmes plus récents capables de travailler avec des caractères sur 16 bits ne peuvent pas traiter les données codées en UCS-4. Cette situation a conduit au développement de formats de transformation UTF (UCS Transformation Formats). Chacun possédant ses propres caractéristiques.

Encodage UTF8

UTF-8 a été conçu par Kenneth Thompson en 1992 pour être compatible avec certains logiciels originellement prévus pour traiter des caractères d’un seul octet.

Les caractères de numéro 0 à 127 sont codés sur un octet dont le bit de poids fort est toujours nul.

Les caractères de numéro supérieur à 127 sont codés sur plusieurs octets.

Encodage UTF 16

UTF-16 est une méthode permettant de transformer un sous-ensemble de la table UCS-4 en une paire de valeurs UCS-2 d’une plage réservée.

UTF-16 est décomposé en 2 types.

UTF-16-BE (Big-endian)

UTF-16-LE (Little-endian)

Le codage UTF-16-BE est l’un des codages préconisés par la norme Unicode. Ce codage associe simplement un code de 16 bits (2 octets) à chaque caractère.

 

Encodage UTF 32

UTF-32 est un protocole pour encoder les caractères sur 32 bits. Du fait que l’UTF-32 utilise 4 bytes par caractère.

Il est aussi décomposé en 2 types.

UTF-32-BE (Big-endian)

UTF-32-LE (Little-endian)

Il est relativement consommateur d’espace.

Support SGBD

Oracle

Deux paramètres permettent de prendre en charge l’Unicode.

  • Database Character Set
  • National Character Set

Ces paramètres sont définis lors de la création de la base.

L’instruction CREATE DATABASE dispose de la clause character set et de la clause national character set qui permettent de déclarer le jeu de caractères qui servira de jeu de caractères de la base et de jeu de caractères nationaux.

Sans spécification de la clause national character set, le jeu AL16UTF16 sera utilisé par défaut.

Le paramètre Database Character Set ne peut pas être configuré en UTF-16.

Oracle gère l’unicode au niveau des colonnes grâce National Character Set et au types de données suivantes :

  • Nchar
  • Nvarchar2
  • nclob

Sybase

Au moment de l’installation, vous devez définir le paramètre default character set. Par défaut il est déterminé par celui utilisé sur votre server (Win = 1252, solaris =ISO 8859-1). Sybase recommande de définir UTF 8 pour ce paramètre si vous utiliser de l’unicode.

Sybase supporte la gestion de l’unicode au niveau du type de colonne à l’aide des 3 types suivants :

Unichar

Univarchar

Unitext

Ces 3 types de données sont encodés en UTF 16.

Sql server

Nous allons introduire la notion de collation.

Une collation est une table de correspondance spécifique à un jeu de caractères.

Un jeu de caractères peut avoir plusieurs collations, en général une par langue (par exemple, latin1 français, latin1 suédois).

Ce paramètre se définit à l’installation, sa valeur par défaut est en fonction de la langue de l’OS sur lequel se fait l’installation (pour les collations de type windows) :

Système en français : French_CI_AS

Système en anglais : Latin1_General_CI_AS

Il sert à déterminer la page de code utilisée dans les champs non unicode (varchar par exemple), l’ordre de tri des chaînes de caractère et aussi la sensibilité aux accents, aux majuscules, etc.

La collation paramétrée s’applique aux bases de données systèmes (master, msdb, tempdb et model) et par défaut aux nouvelles bases de données créées. Elle peut cependant être modifiée lors de la création d’une nouvelle base de données ou lors de l’ajout d’un champ texte grâce au mot clef COLLATE.

Sql server supporte la gestion de l’unicode à travers le type de colonne :

Nchar

Nvarchar

Ntext

My sql

MySQL détermine le jeu de caractères et la collation en fonction de l’option de configuration active quand le serveur démarre ou en fonction des valeurs de configuration à l’exécution.

Vous pouvez utiliser –default-character-set=character_set_name comme jeu de caractères et vous pouvez en même temps ajouter –default-collation=collation_name pour la collation. Par défaut mysql utilise les options suivante –default-charset=latin1 –collation=latin1_swedish_ci car latin1_swedish_ci est la collation par défaut de latin1.

La collation peut aussi être définie au niveau de la base ou de la colonne à l’aide de la clause collate.

En MySQL version 4.x et plus ancien, NCHAR et CHAR étaient synonymes.

MySQL utilise UTF8 comme jeu de caractère prédéfini pour les champs de types Nchar et Nvarchar .

Continuez votre lecture sur le blog :

twitterlinkedinmail

Benjamin VESAN

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.