CodeGym /Cours /SQL SELF /Types de données textuelles : CHAR, ...

Types de données textuelles : CHAR, VARCHAR, TEXT

SQL SELF
Niveau 15 , Leçon 2
Disponible

Quand on parle de manipuler des données texte dans PostgreSQL, on a trois stars principales : CHAR, VARCHAR et TEXT. Chacun a ses propres particularités, avantages et subtilités. On va voir ça ensemble, tranquille.

CHAR(n)

CHAR, ou character, c’est une chaîne de longueur fixe n. Si ta chaîne fait moins de caractères que prévu, elle est automatiquement complétée avec des espaces.

Exemple :

id code - CHAR(5)
1 ''ABC''

Ce type est super pratique quand toutes les chaînes doivent avoir la même longueur (genre des codes, des codes-barres ou des identifiants à taille fixe).

Mais si tu bosses avec du texte de longueur variable, les espaces ajoutés ne font que gaspiller de la place dans la base.

VARCHAR(n)

VARCHAR, ou variable character, sert à stocker des chaînes de longueur variable avec une limite max de n caractères.

Exemple :

id username - VARCHAR(10)
1 ''Alice''

Ce type utilise l’espace efficacement, car il ne garde que le texte réel. Par contre, il faut bien penser à la limite de longueur. Si tu dépasses, la base va te balancer une erreur.

TEXT

TEXT — c’est un type de chaîne sans aucune limite de longueur. On l’utilise souvent quand on ne sait pas jusqu’où le texte peut aller.

Exemple :

id content - TEXT
1 ''Ceci est un long texte. Pas de limites !''

Avantages : tu peux stocker des textes de n’importe quelle taille sans te prendre la tête avec des limites.

Inconvénients : l’absence de limites peut rendre ta base moins efficace si les données texte deviennent énormes.

Comparaison des types de données textuelles

Quand tu bosses avec du texte, c’est important de piger quel type de données est le plus adapté à ton cas. Voilà les différences principales entre CHAR, VARCHAR et TEXT :

Type de données Longueur Performance Quand l’utiliser ?
CHAR(n) Fixe Plus rapide pour des chaînes de longueur fixe Pour des codes à longueur fixe (genre ISO)
VARCHAR(n) Longueur max n Plus rapide que TEXT si tu mets une limite Pour des chaînes de longueur variable avec un max connu
TEXT Illimitée Le plus polyvalent Pour des textes longs dont la taille est imprévisible

Exemples pratiques d’utilisation

Allez, voyons comment utiliser ces types de données dans des cas concrets.

Exemple 1 : Utiliser CHAR pour des codes à longueur fixe

Imagine que tu bosses sur une base où tu dois stocker des codes de villes selon la norme ISO 3166-1 alpha-3. Chaque code doit faire exactement 3 caractères.

city_id city_name - VARCHAR(50) iso_code - CHAR(3)
1 New York NYC
2 Los Angeles LAX
3 Chicago CHI

Ici, CHAR(3) est parfait, vu que chaque code ISO de ville a une longueur fixe.

Exemple 2 : Utiliser VARCHAR pour les noms d’utilisateur

Le nom d’utilisateur, c’est typiquement un bon cas pour VARCHAR. En général, c’est variable, mais tu sais que ça ne dépassera pas 50 caractères.

user_id username - VARCHAR(50) email - VARCHAR(50)
1 Alice alice@example.com
2 Bob bob@example.net

VARCHAR ici permet de gagner de la place, vu que la longueur réelle de la chaîne est souvent inférieure à 50 caractères.

Exemple 3 : Utiliser TEXT pour stocker des descriptions

Imagine que tu as un blog, et que chaque post doit avoir une grosse description texte. Là, TEXT est le choix idéal.

post_id title - VARCHAR(100) content - TEXT
1 Post 1 Ceci est un contenu de blog très long qui continue encore et encore...

Si tu ne sais jamais à l’avance la taille du texte, TEXT est parfait.

4. Détails supplémentaires et pièges à éviter

Quand tu bosses avec des types de données texte, y’a quelques trucs à savoir pour éviter les galères classiques.

Problème : CHAR ajoute des espaces

Si tu compares des chaînes dans un champ CHAR sans tenir compte des espaces ajoutés, tu risques d’avoir des résultats bizarres.

SELECT * FROM cities WHERE iso_code = 'NYC';
-- Rien ne sera retourné si tu ne vires pas les espaces

Comment corriger : Utilise la fonction TRIM() pour enlever les espaces.

SELECT * FROM cities WHERE TRIM(iso_code) = 'NYC';

Problème : Les limites de longueur dans VARCHAR peuvent causer des erreurs

Si tu essaies d’insérer dans un champ VARCHAR une chaîne trop longue, la base va te jeter une erreur.

INSERT INTO users (username, email) VALUES ('Un_nom_utilisateur_trop_long_pour_le_champ', 'test@example.com');
-- Erreur

Comment corriger : Vérifie que la limite (n) colle à tes besoins réels. Ou alors utilise TEXT pour ne pas te prendre la tête avec les limites.

Problème : TEXT peut faire gonfler ta base

TEXT stocke des données sans limite, ce qui peut faire grossir tes tables et compliquer l’indexation.

Comment éviter : Si tu comptes indexer à fond une colonne TEXT, pense à utiliser un VARCHAR limité à la place.

2
Mission
SQL SELF, niveau 15, leçon 2
Bloqué
Normalisation de la casse et suppression des espaces
Normalisation de la casse et suppression des espaces
2
Mission
SQL SELF, niveau 15, leçon 2
Bloqué
Filtrage par motif (LIKE)
Filtrage par motif (LIKE)
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION