Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/09/2011, 19h56   #1
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 53
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 53
Points : 31
Points : 31
Par défaut Récupérer la capacité de stockage d'une colonne

Bonjour, Bonsoir

Supposons que j'ai une table avec un champ 'chapitre' TINYINT(3) UNSIGNED.
Ce champ va accepter des valeurs entre 0 et 255.
Je vais avoir besoin de la valeur de la capacité de stockage de ce champ pour vérifier les valeurs données par l'utilisateur par exemple.
Mais comment vais-je pouvoir récupérer dynamiquement cette capacité de stockage(255) dans mon script PHP ?

Merci.
Beho Double est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/09/2011, 10h17   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Saluton,
Tu peux interroger le serveur MySQL avec DESCRIBE ou SHOW COLUMNS et récupérer ce genre d'infos dans la colonne TYPE du résultat.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 14h15   #3
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Ce lien pourra vous aider

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 02h32   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2011
Messages : 1
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 1
Points : 14
Points : 14
Alors, les infos intéressantes que je peux avoir avec ça c'est le type de la colonne (tinyint) et la limite d'affichage (3) mais je ne peux pas obtenir la valeur max au-delà de laquelle MySQL va tronquer/modifier les données (255).

Alors peut-être que je dois considérer que l'info est déjà contenu dans 'tinyint' et que c'est à moi de faire la traduction de 'tinyint' vers 255.
Je préférais éviter ça si possible vu que j'imaginais que c'était MySQL qui pouvait me fournir ce genre d'info.
Enfin si vous avez d'autres idées je suis preneur.

Merci.
Mephi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 10h18   #5
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 53
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 53
Points : 31
Points : 31
Tiens j'avais même pas vu, j'ai pas posté mon message avec le bon compte.
Et comme visiblement je ne peux plus modifier je précise que le message de Mephi, juste au-dessus, c'est moi qui l'ai écrit.
Beho Double est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 14h11   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 028
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 028
Points : 18 321
Points : 18 321
Envoyer un message via MSN à CinePhil
On prévoit le type de la colonne au plus tard lors de l'implémentation du modèle de données.

Ensuite, le programmeur qui développe l'application qui utilise la BDD doit prendre en compte ces limites pour contrôler la saisie de l'utilisateur et l'empêcher de pondre un roman dans un champ de formulaire destiné à saisir le titre d'un article si celui-ci ira alimenter une colonne de type VARCHAR(100).

La longueur maxi d'une chaîne ou les bornes inférieures et supérieures des nombres sont à déterminer lors de l'élaboration des spécifications et les développeurs doivent ensuite en tenir compte. C'est une contrainte sur les données comme une autre.

Et pour savoir quelles sont les capacités des différents types de colonnes, il y a la documentation du SGBD !
- Types numériques
- Types textuels
- Dates et heures
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 00h48   #7
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 53
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 53
Points : 31
Points : 31
D'accord mais dans ce cas l'info est statique et située à 2 endroits différents : la taille du champ est définie au niveau de la table et aussi au niveau du code de l'application.... tout du moins pour un champ TINYINT(3).
Je pensais à quelque chose qui permettrait de définir le champ uniquement au niveau de la table et de définir sa taille dynamiquement au niveau du code de l'application... pour n'avoir à modifier qu'un seul endroit en cas de changement de taille du champ. En me basant sur le principe qu'on ne fait pas d'application parfaite dès le début et qu'on peut avoir besoin de l'adapter par la suite.
Beho Double est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 02h06   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 028
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 028
Points : 18 321
Points : 18 321
Envoyer un message via MSN à CinePhil
Rien n'interdit au code applicatif de récupérer le format des colonnes des tables en interrogeant la vue information_schema.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 02h29   #9
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 53
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 53
Points : 31
Points : 31
Mais dans ce cas on en revient au début du topic, non ?
C'est-à-dire, comment faire pour récupérer la capacité de stockage max d'un champ ?
Pour un champ TINYINT(3) je peux récupérer 'tinyint', je peux récupérer '3' mais pas le chiffre max qui est 255.
Alors est-ce que je dois m'en passer, ou est-ce que je dois définir dans le code applicatif la capacité de stockage associée à chaque type de champ, ou ... ?
Vu que si j'utilise '3' pour limiter le champ d'un formulaire à l'utilisateur, il pourra toujours entrer le chiffre 342, par exemple, qui sera tronqué au niveau de la BDD.
Beho Double est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 08h43   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 028
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 028
Points : 18 321
Points : 18 321
Envoyer un message via MSN à CinePhil
Et bien il faut que le script PHP ait une constante tableau qui reprend la capacité de stockage décrite par la doc MySQL. Il n'y a que les capacités des CHAR et VARCHAR qui sont directement lisibles dans information_schema.COLUMNS.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 17h33   #11
Invité de passage
 
Inscription : juillet 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 7
Points : 2
Points : 2
Si je ne dis pas de bêtise, les types numériques ne sont pas affectés par la valeur placée entre parenthèse.
Pour information, CinePhil t'avais fournit un lien vers la doc MySQL
Lien de CinePhil
Voici ce que tu cherche:

Type Octets De A

TINYINT 1 -128 127

SMALLINT 2 -32768 32767

MEDIUMINT 3 -8388608 8388607

INT 4 -2147483648 2147483647

BIGINT 8 -9223372036854775808 9223372036854775807

Tu n'a donc qu'à récupéré le type de donnée dans MySQL, puis selon le type tu retrouve la limite dans ton code avec un truc du genre

Code :
1
2
3
4
5
6
 
IF (szTypeChamp == "TINYINT")
{
  nNombreMin = -128;
  nNombreMax=127;
}
joelduret est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h18.


 
 
 
 
Partenaires

Hébergement Web