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

Requêtes MySQL Discussion :

indice d'un ENUM à 0 si élément vide sous MySQL 5.0.15


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Points : 378
    Points
    378
    Par défaut indice d'un ENUM à 0 si élément vide sous MySQL 5.0.15
    Bonjour à tous

    Selon la doc MySQL 5 si une valeur est vide ('') dans une ENUM, elle est associée à un élément indicé à 0.
    Je suis en 5.0.15-nt sous Windows.
    Je n'arrive pas à insérer une telle valeur. Selon un collègue, en version 4, le script passe bien.

    DROP TABLE UnCursus;

    CREATE TABLE UnCursus
    (num CHAR(4), nom CHAR(15),
    diplome ENUM ('BTS','DUT','Licence','INSA'),
    CONSTRAINT pk_Cursus PRIMARY KEY(num));

    INSERT INTO UnCursus VALUES ('E0', 'P. Caboche', ('DUT'));
    INSERT INTO UnCursus VALUES ('E1', 'F. Brouard', ('BTS'));
    INSERT INTO UnCursus VALUES ('E2', 'F. Degrelle', 'Licence');

    --Insert refusé : Normal
    INSERT INTO UnCursus VALUES ('E3', 'Bug', ('MathSup'));

    --? Comment insérer une chaîne vide ? les 2 inserts sont refusés!
    INSERT INTO UnCursus VALUES ('E4', 'Vide', (''));
    INSERT INTO UnCursus VALUES ('E4', 'Vide', '');

    --les NULL passent
    INSERT INTO UnCursus VALUES ('E5', 'Null', NULL);
    INSERT INTO UnCursus (num, nom) VALUES ('E6', 'Null2');

    SELECT nom, diplome, diplome+0 FROM UnCursus;

    DROP TABLE UnCursus;

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Bonjour,

    A mon avis ça a un rapport avec le mode SQL de ton serveur.

    Chez moi (MySQL 5.0.13) ça passe mais avec un warning donc à priori ça voudrait dire que tu es en mode TRADITIONAL (ou à un niveau plus fin STRICT_TRANS_TABLES/STRICT_ALL_TABLES) :

    TRADITIONAL

    Make MySQL behave like a “traditional” SQL database system. A simple description of this mode is “give an error instead of a warning” when inserting an incorrect value into a column.
    http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

    Tu trouveras sur la même page comment changer de SQL_MODE (par contre j'ai déjà essayé de le faire à la volée et ça marche plus ou moins bien ).
    Pensez au bouton

  3. #3
    Membre averti Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Points : 378
    Points
    378
    Par défaut
    Aucun de ces modes n'arrange le problème.

    SET SESSION sql_mode = 'STRICT_ALL_TABLES';
    SET SESSION sql_mode = 'STRICT_TRANS_TABLES';
    SET SESSION sql_mode = 'TRADITIONAL';

    En revanche avec la directive IGNORE :

    INSERT IGNORE INTO UnCursus VALUES ('E4', 'Vide E4', (''));
    INSERT IGNORE INTO UnCursus VALUES ('E5', 'Vide E5', '');

    Les deux lignes sont en base et l'indice 0 est bien présent pour chacun d'eux.
    Merci à toi et à +

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par Soutou
    Aucun de ces modes n'arrange le problème.

    SET SESSION sql_mode = 'STRICT_ALL_TABLES';
    SET SESSION sql_mode = 'STRICT_TRANS_TABLES';
    SET SESSION sql_mode = 'TRADITIONAL';
    Justement, ce sont ces modes qui génèrent des erreurs

    Pour avoir des warnings à la place, tu peux effectivement utiliser IGNORE ou des modes non contraignants comme ANSI...
    Pensez au bouton

  5. #5
    Membre averti Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Points : 378
    Points
    378
    Par défaut
    Oui le mode ANSI fait bien passer les 2 INSERT mais autorise aussi l'INSERT de ('E3', 'Bug', ('MathSup')) qui ne respecte pas les données de l'ENUM.
    J'ai ma réponse merci.

    ------------Question sur user sur localhost -------------------------

    Par ailleurs je pose une question qui paraît toute con :
    Peux-t-on créer un user (autre que root) pouvant se connecter en local sous MySQL 5. J'arrive à CREATE USER ... puis donner des droits mais mon user ne peut se connecter. J'ai vu dans la doc que la politique était d'autoriser seul root sur localhost. Mais je n'ai pas lu comment la contourner?

  6. #6
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par Soutou
    Peux-t-on créer un user (autre que root) pouvant se connecter en local sous MySQL 5.
    oui

    Citation Envoyé par Soutou
    J'arrive à CREATE USER ... puis donner des droits mais mon user ne peut se connecter.
    Tu as un message d'erreur particulier ?
    Pensez au bouton

  7. #7
    Membre averti Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Points : 378
    Points
    378
    Par défaut
    Salut Chef

    Non c'est bon c'est moi qui confondait les host entre % localhost et autres, MySQL ne raisonne pas du tout pareil qu'Oracle.

    Il n'y a pas la notion de schéma puisque 2 users différents sur la même database ne peuvent créer chacun la table T. Si je comprends bien

    database : c'est l'espace qui contient des tables de noms distincts
    user : compte qui peut manipuler des tables si a les droits

    Il n'y a pas la notion d'appartenance d'une table a un user, une table appartient à une database et des users peuvent ou non y accéder.
    C'est ça dans les grandes lignes?

    Par ailleurs, je peux te demander un truc par message privé?

  8. #8
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par Soutou
    Il n'y a pas la notion de schéma puisque 2 users différents sur la même database ne peuvent créer chacun la table T. Si je comprends bien

    database : c'est l'espace qui contient des tables de noms distincts
    user : compte qui peut manipuler des tables si a les droits

    Il n'y a pas la notion d'appartenance d'une table a un user, une table appartient à une database et des users peuvent ou non y accéder.
    C'est ça dans les grandes lignes?
    Absolument

    La notion de schéma existe bien sous MySQL (c'est un terme introduit il y a peu et correspondant à une "base") mais comme tu viens de le décrire elle est différente d'un schéma Oracle.

    Citation Envoyé par Soutou
    Par ailleurs, je peux te demander un truc par message privé?
    Oui, n'hésite pas...
    Pensez au bouton

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

Discussions similaires

  1. [xml + xsl] détection d'élément vide
    Par tut dans le forum XSL/XSLT/XPATH
    Réponses: 20
    Dernier message: 11/05/2007, 10h44
  2. StrinkTokenizer : récupérer les éléments "vides"
    Par Yannick_from_31 dans le forum Langage
    Réponses: 3
    Dernier message: 21/08/2006, 10h29
  3. Connaitre un élément vide
    Par thierry337 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 14/03/2006, 08h51
  4. Supprimé des éléments vide d'un tableau
    Par shinux2004 dans le forum Langage
    Réponses: 4
    Dernier message: 04/07/2005, 19h40
  5. Group by, jointure, élément vide
    Par Tan dans le forum Langage SQL
    Réponses: 11
    Dernier message: 24/11/2004, 13h48

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