|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 53 ![]() |
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. |
|
|
10
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
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) |
|
00
|
|
|
#3 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
__________________
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) |
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 1 ![]() |
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. |
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 53 ![]() |
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. |
|
|
00
|
|
|
#6 |
![]() ![]() |
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 ! |
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 53 ![]() |
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. |
|
|
00
|
|
|
#8 |
![]() ![]() |
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 ! |
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 53 ![]() |
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. |
|
|
00
|
|
|
#10 |
![]() ![]() |
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 ! |
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : juillet 2010 Messages : 7 ![]() |
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 :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com