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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Champ non vide et non NULL [phpMyAdmin]


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut Champ non vide et non NULL
    Bonjour à tous.

    J'espère que vous pourrez m'aider, car je me trouve devant une situation qui me semble... étrange.

    J'ai une base de données composées de deux tables : disons X et Y.
    Dans ces deux tables, j'importe (grâce à "load data local infile...") des fichiers csv : un dans dans chaque table.

    L'import se passe sans problème.

    Dans ma table Y, je me retrouve avec des champs vides. Logiques, puisqu'ils le sont aussi dans le fichier CSV.
    Sauf que... quand je fais une requêtes pour les afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from bdd.Y where champ = ''
    ... rien ne ressort. Bon, Soit.
    Je tente alors un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from bdd.Y where champ IS NULL
    , mais.. pareil, rien ne sort. Ce qui m'embête, car, pour les besoins d'une autre requête (qui implique donc la table Y et la table X), je ne dois pas prendre les champs vides. Sauf que, comme ils semblent ne pas être considérés comme vides, il me les prend en compte, et ça fausse tout mon truc...

    Le truc, c'est que j'ai une requête qui me concatène "xxx" et le contenu de ce champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE bdd.champ SET champ = CONCAT('xxx', champ) WHERE champ != '';
    .
    Sauf que, selon ma base, il n'y a pas de champ '', donc il m'ajoute des "xxx" PARTOUT. Donc, a priori, je me retrouve avec des champs UNIQUEMENT composés de 'xxx' (les anciens champs vides... vous suivez ?).
    Et bien, vous devinez jamais, mais quand je fais une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from bdd.Y where champ ='xxx'
    ... ben, j'ai rien qui ressort.
    Situation inextricable.

    Je ne sais pas quoi faire, et je dois vraiment essayer de régler ce problème le plus vite possible

    Est-ce que qu'une âme charitable saurait POURQUOI un champ vide ne ressort pas lors d'une requête censée faire sortir les champs vides ??
    Est-ce qu'il existe un autre "type" que "vide" et "null" pour désigner un champ non-rempli ?
    Et surtout... comment faire pour régler ça ?

    Merci d'avance à ceux qui se pencheront sur mon problème

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Tu as essayé l'inverse.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from bdd.Y where champ IS NOT NULL

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il semble que tes valeurs ne soient ni vide ni nul. Il peut y avoir un caractère particulier non visible.
    Tu peux simplement ouvrir le CSV avec notepad++ et afficher tous les caractères.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Tu as essayé l'inverse.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from bdd.Y where champ IS NOT NULL
    Oui, j'ai essayé ça, et la totalité de la table apparait (environ 17000 lignes)

    Il semble que tes valeurs ne soient ni vide ni nul. Il peut y avoir un caractère particulier non visible.
    Tu peux simplement ouvrir le CSV avec notepad++ et afficher tous les caractères.
    J'ai déjà ouvert le fichier avec Notepad++.
    Bon, je n'ai pas trouvé l'option "afficher tous les caractères", mais à première vue, il n'y aurait pas de caractère "non-visible".

    Ce que je ne comprends pas surtout, c'est que ce fichier là, je l'avais déjà importé il y a quelques temps, et je n'avais pas eu de problèmes.

    J'ai réfléchi aux modifications qu'il y avait pu avoir entre la fois précédente et cette fois-ci, et le seul truc qui a changé, c'est l'encodage de ma table (qui est en UTF8_general_ci maintenant, anciennement en latin1_swedish_ci (ou un truc comme ça))
    Mais même en remettant l'ancien encodage, pas d'amélioration...

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Si tu as tout sélectionné alors @Sabotage à raison, il y a un caractère.

    Essaye ceci pour voir.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from bdd.Y where TRIM(champ) = ''

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Dans Notepad++ : Affichage > Symbole spéciaux > Afficher tous les caractères
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut
    Tout d'abord, merci pour vos réponses.

    Il peut y avoir un caractère particulier non visible.
    Tu peux simplement ouvrir le CSV avec notepad++ et afficher tous les caractères.
    Alors... non, je ne vois pas nouveaux caractères... j'ai juste mes points virgules de fin de ligne qui se "transforment" en deux carrés blancs avec écrit dedans "CR" et "LF".

    Essaye ceci pour voir.

    Code SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from bdd.Y where TRIM(champ) = ''
    Ca ne donne rien
    Aucune ligne ne sort...

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux nous fournir un extrait du CSV et le dump de la structure de ta table ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    +1 @Sabotage

  10. #10
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut
    Alors... c'est un peu délicat.

    Je ne peux pas vous fournir d'extrait de mon CSV (ni de dump, du coup) puisque ce fichier contient des informations (noms, prénoms, numéros de téléphones...) des employés de mon lieu de travail

    Mon CSV est construit de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dn;sn;givenname;misc15;misc40;employeenumber;mail;internationalisdnnumber
    uid=Prenom NOM,o=adresse,o=sites,o=reseau,o=lieu,o=directoryroot;NOM;Prénom;DIRECTION;GUID;matricule;adresse.mail@domaine.fr;0102030405
    Ca, c'est quand j'ai une ligne complète.
    Mais dans certains cas, je n'ai pas de numéro de téléphone :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uid=Prenom NOM,o=adresse,o=sites,o=reseau,o=lieu,o=directoryroot;NOM;Prénom;DIRECTION;GUID;matricule;adresse.mail@domaine.fr;
    EDIT : La requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from bdd.table where champ = 0
    m'affiche mes lignes au champ vide !

    Du coup, a priori, en updatant ces lignes et en remplaçant les 0 par du ' ', je ne devrais plus avoir de problèmes ! (a priori, hein...)

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Fourni nous seulement les quelques lignes du CSV qui permettent de reproduire le problème en changeant les informations.

    Pour la structure de la table, je ne pense pas qu'elle contienne des informations.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut
    Bon, he bien problème résolu (voir mon edit au post précédent)...

    je me sens bien bête de ne pas avoir pensé au champ = 0

    Merci à vous tous de vous être penchés sur mon problème, en tout cas (même si c'est probablement le "problème" le plus c*n de la terre... j'ai limite honte quoi)

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Et tu n'avais pas vu qu'il y avait 0 comme valeur dans ta bdd ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut
    Non, je n'avais pas vu qu'il y avait des 0 car... il n'y en avait pas, tout simplement.

    mes champs apparaissaient VIDES. Il n'y avait RIEN dedans. Donc je ne pouvais pas me douter qu'en faisant champ = 0, ces champs là ressortiraient...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/03/2016, 09h14
  2. [AC-2007] valeur de champ non nulle
    Par brutus437 dans le forum IHM
    Réponses: 7
    Dernier message: 19/01/2011, 18h30
  3. [MySQL] Lister les champs non null
    Par bernard26000 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/05/2009, 18h01
  4. [insertion]0 et non NULL pour un champ real
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 12/07/2005, 18h19
  5. return array vide et non null
    Par mereyj dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/04/2005, 20h25

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