Accueil > Bases de données relationnelles et indexation du contenu > Encodage du texte

Encodage du texte

jeudi 8 octobre 2009, par LOISON

Dans une base de données les tables peuvent contenir différents types de données. Ces types sont prédéfinis, ils déterminent la place occupée par vos données et par la même occasion ont un impact sur la rapidité de traitement. Il est donc important de choisir avec soin le type de données que contiendront les différents champs de vos tables. Il faut également savoir que lorsque que l’on crée un enregistrement la taille prise par celui-ci sur le disque dur est la taille maximale pour chaque champ défini. Ainsi, même si l’on ne remplit pas tous les champs, l’espace disque utilisé correspondra à l’ajout de la taille maximale pour chaque champ. Il y a cependant le cas particulier de types TEXT et BLOB décrits ci-après où les données ne sont pas enregistrées directement dans la table. La table ne contient qu’un pointeur (une adressse où trouver le contenu).

Les trois types de champs disponibles sur MySQL pour le texte

Les principaux types utilisés en base de données pour stocker du texte sont :
- le type varchar qui permet d’écrire avec des caractères alphanumériques. Ce type de données stocke des chaînes de 255 caractères maximum , soit 256 octets et l’option BINARY permet de tenir compte de la casse. Ce type de champ ne peut être utilisé pour l’indexation de la table et utilisé dans les clefs primaires.
- le type TEXT qui permet d’écrire uniquement des chaînes de caractères, ce type de données stocke des chaînes de 65535 caractères maximum, soit 65536 octets. Ce champ est insensible à la casse. Il ne peut pas être utilisé pour indexer la table mais, dans le cas de MySQL, il est au moins possible d’indexer son contenu en FULLTEXT, cad. que l’on peut définir un type d’index particulier qui permet d’accéder aux enregistrements à partir des mots contenus dans ce type de champ.
- le type BLOB (Binary Large OBjects) qui est utilisé pour écrire avec n’importe quel type de caractère. Le contenu est considéré comme un objet image, donc dans ce cas il n’y a aucune psossibilité d’indexation..Ce type de données stocke des chaînes de 65535 caractères maximum,soit 65536 octets .Ce champ est sensible à la casse.

Une autre différences entre les colonnes de type BLOB et celles de type TEXT se situe aux niveau des tris et comparaisons : Les tris, faits sur les BLOB, contrairement à ceux faits sur les TEXT, tiennent compte de la casse.

L’encodage du texte permet de plus ou moins gèrer les caractères spéciaux suivant l’interclassement utilisé.

Chaque type d’encodage du texte peut avoir plusieurs interclassements, un interclassement est ce qui permet de faire correspondre des caractères spécifique sur des expressions par exemple les chaînes "été,ete,Ete,EtE,ETE" désignent tous le même mot mais avec des caractères différents . Sans interclassement il y aurait distinction entre ces mots suivant les caractères utilisés, ce qui poserait des problèmes pour l’étude des tables. En général on utilise un seul interclassement par bases de données ou table ou encore colonnes (champs) .

Les interclassements utilisés prennent plus ou moins de place sur le disque dur, selon si l’on veut écrire avec un code multilingues utilisant donc énormément de correspondances entre les caractères (par exemple utf8_general_ci) ou si l’on veut restreindre seulement à une seule langue où il y aura donc beaucoup moins de correspondance entre les caractères (par exemple latin_1_swedish_ci).
Les interclassements avec les extensions _ci permettent d’ignorer la casse .

La base de gestion de caractères de MySQL

Voici les différentes relations qui existent entre les tables ’character_sets’, ’collations’ et ’collation_character_set_applicability’ issues de la base information_shema actuellement utilisée par le SGBDR MySQL pour gérer les caractères..

Tout d’abord je vais vous expliquer les liens entre clef primaire et clefs étrangères en définissant les liens possibles sur chacune de ces tables .

Commençons par la table ’collation_character_set_applicability’ , cette table contient 2 champs : ’collation_name’ et ’character_set_name’. Chaque champ regroupe l’ensemble des interclassements utilisés par les tables ’collations’ et ’character_set’. Ces interclassements ont des liens qui renvoient pour le champ ’collation_names’ vers la table ’collation’ avec comme clef primaire l’ensemble des interclassements du champ ’collation_name’ et comme clef secondaire le champ ’character_set_name’ et pour le champ ’character_set_name’ vers la table ’character_set’ avec comme clef primaire le champ ’character_set_name’ et comme clef secondaire le champ ’default_collate_name.

Ensuite pour la table ’collation’ nous avons un champ ’character_set_name’ qui a des liens hypertextes qui renvoie vers la table ’character_set’ et inversement pour la table ’character_set’ nous avons un champ ’default_collate_name’ qui a également des liens qui renvoie à la table ’collations’.

Pour aller plus loin ...

Voici les sites qui ont aidé à la conception de cet article :
- http://interbase.developpez.com/ib-datatype/
- http://www.lephpfacile.com/cours/11-creation-des-tables-en-sql