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

Administration MySQL Discussion :

Mysql supprime les zéros en début de données


Sujet :

Administration MySQL

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut Mysql supprime les zéros en début de données
    Bonjour

    J'ai un champ avec des données qui commence par "00" mais mysql enlève ces zéro comment les faire apparaître ?
    Voici ma table et mes insert into:
    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
    18
    19
    20
    21
    CREATE TABLE IF NOT EXISTS country_list (
    code VARCHAR(2),
    country_code smallint(11) DEFAULT NULL,
    dial_code smallint(11) DEFAULT NULL,
    id_code int(11) NOT NULL,
    name varchar(90) DEFAULT NULL
    )ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
     
    INSERT INTO country_list VALUES
    ('AF','0093','+93','1','Afghanistan'),
    ('AL','00355','+355',' 2','Albania'),
    ('DZ','00213','+213','3','Algerie'),
    ('AS','001684','+1 684','4','AmericanSamoa'),
    ('AD','00376','+376','5','Andorra'),
    ('AO','00244','+244','6','Angola'),
    ('AI','001264 ','+1 264','7','Anguilla'),
    ('AG','001268 ','+1268','8','Antigua and Barbuda'),
    ('AR','0054','+54','9','Argentina'),
    ('AM','00374','+374','10','Armenia'),
    ('AW','00297','+297','11','Aruba')
    A la fin j'ai ça dans la base, dans le champ country-code les deux zéro du début sont supprimés:
    Nom : 127.0.0.1   127.0.0.1   toutpaie_ztx_ywy3   country_list   phpMyAdmin 4.1.4.png
Affichages : 1600
Taille : 50,1 Ko
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 831
    Points
    30 831
    Par défaut
    Tout simplement parce qu'un nombre n'a pas de zéros devant
    Si tu veux enregistrer un code composé de chiffres avec des zéros non significatifs, il faut une colonne de type caractère et non numérique.

    C'est toute la différence entre un chiffre et un nombre.
    Un nombre est une valeur quantifiable, avec laquelle on peut faire des calculs.
    Un chiffre est un caractère, au même titre qu'une lettre, et ne représente pas une valeur.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Merci beaucoup j'ai changé le type de la colonne et ça marche, merci !
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 148
    Points : 38 934
    Points
    38 934
    Billets dans le blog
    9
    Par défaut
    Ici, si vos colonnes sont numériques, il suffit d'enlever les cotes dans l'assignation des valeurs

    Si vous devez convertir le format numérique en caractère ou inversement, vous pouvez utiliser la fonction CAST ou CONVERT
    cf. https://dev.mysql.com/doc/refman/5.7...functions.html

    Notez qu'il est préférable de citer les colonnes dans l'insertion. La syntaxe suivante est à privilégier :
    INSERT INTO ma_table (Col1, Col2, ..., Coln) VALUES (Val1, Val2, ..., Valn)
    Cette syntaxe est plus claire car elle lève toute équivoque sur les colonnes cible et évite les mauvaises surprises en cas de modification de la structure de la table ou de la vue.

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 388
    Points : 19 106
    Points
    19 106
    Par défaut
    Salut à tous.

    @ al1_24 : transformer le type de la colonne en char est une très mauvaise idée. Pourquoi ?
    Car c'est juste une question de présentation à l'affichage du nombre.
    Et ce nombre va occupé plus de place en stockage qu'il ne se doit !

    Citation Envoyé par MInfo25
    J'ai un champ avec des données qui commence par "00" mais mysql enlève ces zéro comment les faire apparaître ?
    D'abord, cela ne se nomme pas un champs mais une colonne.
    Ensuite, les zéros devant un nombre ne sont pas des informations utiles.
    Et vous indiquez ici soit un problème d'affichage, soit un problème de stockage de votre nombre.

    La colonne qui vous pose problème est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    country_code smallint(11) DEFAULT NULL,
    Il suffit de modifier votre colonne ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    country_code smallint(11) zerofill default null,
    A l'affichage, vous aurez toujours 11 chiffres, complétés à gauche par des zéros.
    Mais si vous utilisez smallint, le maximum est de 5 chiffres.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Pas d'accord !

    La bonne pratique est qu'on n'utilise des colonnes numériques que pour les identifiants auto-incrémentés (et donc les clés étrangères) et les nombres sur lesquels on peut faire des calculs (une année est un nombre, pas une référence de produit, même si elle est toujours composée exclusivement de chiffres).

    Un jour ou l'autre, il peut arriver qu'un code initialement numérique devienne alphanumérique et on se retrouve à devoir changer les requêtes qui considéraient le code en tant que nombre.
    Exemple avec les départements français qui étaient numérotés de 01 à 95 (+ les DOM en 9nn) : un jour, la Corse (20) a été divisée en deux (2A et 2B).

    Un code postal n'est pas un nombre, un numéro de téléphone non plus. Dans le cas présent, le country_code n'est pas un nombre. Comme son nom l'indique, c'est un code.

    Et au passage, insérer la valeur '0093' dans une colonne de type SMALLINT, ce n'est pas normal que MySQL accepte ça !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 388
    Points : 19 106
    Points
    19 106
    Par défaut
    Salut CinePhil.

    Citation Envoyé par CinePhil
    Pas d'accord !
    Je veux bien mais avec qui et sur quoi ?

    Ici, il s'agit de la colonne "country_code" qui est de nature numérique dans l'exemple donnée par MInfo25.
    Je suis parti de l'hypothèse que ce n'est qu'un problème d'affichage et non un problème de stockage.
    Donc "93" ou "0093", pour moi, cela représente la même chose, en stockage, soit toujours la valeur numérique 93.
    Pour les comparaison, cela ne pose aucun problème, en tout cas dans le code pays.

    Citation Envoyé par CinePhil
    La bonne pratique est qu'on utilise des colonnes numériques que pour les identifiants auto-incrémentés (et donc les clés étrangères) et les nombres sur lesquels on peut faire des calculs (une année est un nombre, pas une référence de produit, même si elle est toujours composée exclusivement de chiffres).
    Là, je ne suis pas d'accord avec vous sur cette restriction des colonnes numériques. Je ferai une réponse de Normand, ça dépend !

    Il y a le problème de l'espace d'occupation en mémoire de votre information. Je préfère mettre en numérique, plutôt que sous forme de chaines de caractères car cela va nous faire gagner quelques octets par lignes et donc sûrement des mega octets ou plus dans la volumétrie de la table.

    L'important est la représentation de votre information et comment allez-vous l'exploiter par la suite.

    Citation Envoyé par CinePhil
    Exemple avec les départements français qui étaient numérotés de 01 à 95 (+ les DOM en 9nn) : un jour, la Corse (20) a été divisée en deux (2A et 2B).
    Oui, je suis d'accord avec vous sur cet exemple des départements français.

    Citation Envoyé par CinePhil
    Un code postal n'est pas un nombre
    La poste française a conservée l'ancienne notation des départements de la corse (20) et donc ne fait pas de distinction entre haute corse et corse du sud.
    Voici pour la haute corse : http://fr.gpspostcode.com/code-posta...e/haute_corse/
    Et voici pour la corse du sud : http://fr.gpspostcode.com/code-posta.../corse_du_sud/

    Mais comment chacun le sait, le code postal ne concerne pas que la France mais aussi l'international.

    Citation Envoyé par CinePhil
    un numéro de téléphone non plus
    Oui car la recommandation est le E.164 :
    - Un numéro de téléphone doit avoir au maximum 15 chiffres
    - La première partie est l’indicatif du pays (1 à 3 chiffres)
    - La seconde partie est l’indicatif national (NDC)
    - La dernière partie est le numéro de l’abonné (SN)
    - Les numéros NDC et SN sont collectivement appelés numéro national.

    Exemple de numéro de téléphone international :
    - Indicatif pays : +44
    - Indicatif national : 7911
    - Numéro de l’abonné : 123456
    - Résultat : +447911123456

    Pourquoi on ne peut pas le mettre sous forme numérique ? Car les zéros ont de l'importance.
    Un numéro commençant par "17" ne correspond pas à "017" ou encore "0017".
    Autrement dit, le formatage du numéro de téléphone a son importance !
    --> https://www.cm.com/fr-fr/blog/commen...international/

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. Supprimer les zéros au début d'une chaine
    Par HULK dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/11/2012, 18h13
  2. Supprimer les zéros au début d'un String
    Par zineddine4000 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 24/06/2010, 14h21
  3. Réponses: 5
    Dernier message: 29/08/2006, 19h02
  4. [MySQL] Supprimer les tuples ...
    Par Seth77 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 12/02/2006, 18h10
  5. Supprimer les zéros à gauche du DecimalSeparator
    Par Droïde Système7 dans le forum Langage
    Réponses: 19
    Dernier message: 25/08/2005, 17h35

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