IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Syntaxe SQL / fonction initcap


Sujet :

PostgreSQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut Syntaxe SQL / fonction initcap
    Bonjour,

    Je crée une table (person) de personnes avec des champs nom, prénom, ...
    Sur le champ prénom, je met une contrainte pour s'assurer que la première lettre du prénom est une majuscule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    pers_surname	VARCHAR(20)		NOT NULL	CHECK (pers_surname = INITCAP(pers_surname))										 ,
    ...
    J'ai un problème si je fais un insert avec un prénom contenant une lettre accentuée (Agnès):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ERROR:  new row for relation "person" violates check constraint "person_pers_surname_check"
     
    ********** Error **********
     
    ERROR: new row for relation "person" violates check constraint "person_pers_surname_check"
    SQL state: 23514
    comment faire ?
    Merci,
    Nico

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Quel est votre sgbd ?

    Peut-on avoir l'insert que vous effectuez ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    je suis sous postgresql 8.4.

    la création de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    CREATE TABLE person
    (
    	pers_id			INTEGER			NOT NULL	UNIQUE																				 ,
    	pers_name		VARCHAR(20)		NOT NULL	CHECK (pers_name = UPPER(pers_name))												 ,
    	pers_surname	VARCHAR(20)		NOT NULL	CHECK (pers_surname = INITCAP(pers_surname))										 ,
    	pers_organism	VARCHAR(75)		NOT NULL																						 ,
    	pers_status		VARCHAR(30)		NOT NULL	CHECK (pers_status IN ('Stagiaire','Ingénieur','Chercheur','Technicien','Capitaine')),
    	pers_missions	VARCHAR(150)																									 ,
    	pers_adress		VARCHAR(100)																									 ,
    	pers_cp			VARCHAR(5)																										 ,
    	pers_town		VARCHAR(30)																										 ,
    	pers_phone		VARCHAR(14)																										 ,
    	pers_mail		VARCHAR(80)																										 ,
    	commentaire		VARCHAR(65535)																									 ,
    	CONSTRAINT pk_person PRIMARY KEY (pers_id)
    );
    CREATE UNIQUE INDEX idx_person_id ON person (pers_id ASC);
    l'insert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO person (pers_id, pers_name, pers_surname, pers_organism, pers_status, pers_missions, pers_adress, pers_cp, pers_town, pers_mail) VALUES (18, 'BURGEON', 'Agnès', 'MonLabo', 'Technicien', 'Terrain automne 2006', 'Mon Adresse', 'cp', 'MaVille', 'Mon Mail');
    Nico

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Je suspect un problème d'encodage de votre base.

    Quelle valeur avez-vous dans ENCODING et LC_CTYPE ?

    Ensuite pouvez-vous tester ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select upper('é'), initcap('éd')
    Je n'ai jamais poussé mes recherche bien loin la dedans mais regardez dans la doc officielle.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ENCODING = 'SQL_ASCII'
    LC_COLLATE = 'C'
    LC_CTYPE = 'C'

    réponse de la requête select :
    ça veut dire qu'il ne prend pas en compte les lettres accentuées ? Mais dans mon cas, la lettre accentuée n'est pas en début de mot ...

    Nico

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bein faites un select initcap('réd'), le résutlat sera le même.


    Si vous refaites ces même tests avec le paramétrages suivant par exemple, le résultat sera différent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ENCODING = 'UTF8'
    LC_COLLATE = 'French_France.1252'
    LC_CTYPE = 'French_France.1252'
    Bref creusez dans ce sens.

    En particulier :
    SQL_ASCII se comporte de façon considérablement différente des autres valeurs. Quand le jeu de caractères du serveur est SQL_ASCII, le serveur interprète les valeurs des octets 0-127 suivant le standard ASCII alors que les valeurs d'octets 128-255 sont considérées comme des caractères non interprétés. Aucune conversion de codage n'est effectuée avec SQL_ASCII. De ce fait, cette valeur ne déclare pas tant un encodage spécifique que l'ignorance de l'encodage. Dans la plupart des cas, si des données non ASCII doivent être traitées, il est déconseillé d'utiliser la valeur SQL_ASCII car PostgreSQL™ est alors incapable de convertir ou de valider les caractères non ASCII.
    Donc les accents ...

Discussions similaires

  1. Syntaxe SQL de la fonction inputmask ???
    Par Aurèl90 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/09/2005, 15h59
  2. Syntaxe SQL sous BCB
    Par ORLIK dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/10/2004, 20h47
  3. Pb configuration et syntaxe SQL
    Par Glloq dans le forum Débuter
    Réponses: 2
    Dernier message: 09/09/2004, 15h17
  4. syntax sql spéciale pour postgresql ???
    Par krimson dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 05/05/2004, 15h23
  5. requete syntaxe sql
    Par tomm dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/04/2004, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo