Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je travaille sur une 8.4.2 sous Cent-OS 5.
J'ai créé une table avec la structure suivante :
CREATE TABLE type_action (
id_type_action CHARACTER(3) NOT NULL,
libelle CHARACTER VARYING(30) NOT NULL,
id_type_operation CHARACTER(1) NOT NULL
);
ALTER TABLE geo.type_action OWNER TO postgres;
J'ai saisi des valeurs sur 1, 2 ou 3 caractères dans le champ ID_TYPE_ACTION.
Lorsque je fais un SELECT, je ne reçois jamais les espaces en fin sur les valeurs contenant 1 ou 2 caractères :
select id_type_act,length(id_type_act),'--'||id_type_act||'--' from type_act;
RR, 2, --RR--
P, 1, --P--
QQQ,3, --QQQ--
Ne devrais-je pas obtenir :
RR , 3, --RR --
P ,3, --P --
QQQ,3, --QQQ--
Merci.
Hors ligne
Les blancs de padding de char ne sont pas significatifs. Quand vous utilisez l'opérateur de concaténation, ils sont supprimés.
Marc.
Hors ligne
Qu'est-ce que tu veux dire par "non significatif"?
J'ai fait un test :
CREATE TABLE testchar
(
id serial NOT NULL,
truc character(5)
)
WITH (
OIDS=FALSE
);
puis j'ai inséré des données, et notamment :
insert into testchar (truc) values ('ba ');
tests=# select '**' || truc || '**' from testchar;
?column?
-----------
**a**
**ab**
**abc**
**abcd**
**abcde**
** bcde**
**ba**
(7 lignes)
L'espace de fin est supprimé aussi, alors que je l'avais bien mis.
C'est curieux, je n'avais jamais remarqué cela. Est-ce que c'est spécifique à PostgreSQL?
Hors ligne
non significatif == pas de sens
En gros, tu utilises le champ avec des opérateurs (concaténation par exemple, mais aussi comparaison), les espaces de fin sont tronqués. Par contre, si tu ne récupères que la colonne (SELECT colonne FROM...), les espaces apparaîtront qu'ils aient été ajoutés ou pas au moment de l'insertion.
Dans un varchar, ils sont significatifs. Donc ils ne sont pas ajoutés si la taille de la chaîne est inférieure à la taille du champ (pour le stockage). Ils sont aussi considérés dans les opérations de concaténation, de comparaison, etc.
Guillaume.
Hors ligne
Ah oui, en fait comme j'avais toujours vu récupérer les valeurs dans un programme puis fait les opérations sur les chaînes, je n'avais pas pensé que cela pouvait être différent si on le faisait dans le SQL directement.
Hors ligne
Pages : 1