web-dev-qa-db-fra.com

MySQL - Limites de taille aux colonnes entières

J'utilise phpMyAdmin pour créer mes structures de table.

Je peux lire dans les pages de documentation sur MySQL sur les limites de taille pour les types entiers: MySQL Integer Types Reference


Voici donc où je commence à être un peu confondu avec la création d'une colonne.

Je veux créer une colonne dans le tableau: tbl_note_categories appelé notescounter

Je ne m'imagine pas créer des milliers de noteids dans le tbl_notes avec un categoryid spécifique. Mais je crois que je créerais des centaines de notes pour chaque categoryid.

Je suis sur le point de choisir entre: tinyint, smallint, mediumint. Selon le lien de documentation ci-dessus, je suppose que smallint est mon meilleur choix.

Voici donc ma confusion. PhpMyAdmin demande qu'un paramètre Longueur/Valeurs soit spécifié. Je vais m'assurer que cette nouvelle colonne (notescounter) n'est pas signée, ce qui me donne jusqu'à 65536. Est-ce que cela signifie que j'ai besoin que la longueur/valeurs soit (5)?

Je suppose que la longueur est la longueur du caractère, mais je ne suis pas sûr. (comparé à varchar)

Snapshot of New column in PhpMyadmin

24
coffeemonitor

Non, c'est une idée fausse commune à propos de MySQL. En fait, la "longueur" n'a aucun effet sur la taille d'un entier ou la plage de valeurs qu'il peut stocker.

  • TINYINT est toujours de 8 bits et peut en stocker 28 valeurs distinctes.
  • SMALLINT est toujours 16 bits et peut stocker 216 valeurs distinctes.
  • INT est toujours 32 bits et peut stocker 232 valeurs distinctes.
  • BIGINT est toujours 64 bits et peut stocker 264 valeurs distinctes.

Il y a aussi un MEDIUMINT, mais les ingénieurs qui travaillent sur MySQL me disent que MEDIUMINT est toujours promu en INT 32 bits en interne, donc il n'y a en fait aucun avantage à utiliser MEDIUMINT.

La longueur est uniquement pour l'affichage, et cela n'a d'importance que si vous utilisez l'option ZEROFILL.

Voir un exemple dans ma réponse à Quelle est la différence (lorsqu'elle est appliquée à mon code) entre INT (10) et INT (12)?

48
Bill Karwin

Oui, vous souhaitez spécifier une longueur de 5.

Dans MySQL, l'attribut "length" sur les types entiers est facultatif. C'est une extension MySQL qui n'est pas standard).

Lorsqu'il est omis de la déclaration de colonne, MySQL fournit une valeur par défaut. Pour un SMALLINT UNSIGNED, la valeur par défaut est 5.

Cette valeur n'a PAS d'impact sur la plage de valeurs pouvant être stockées pour un type entier. Il spécifie une "longueur d'affichage", qui est renvoyée dans les métadonnées de l'ensemble de résultats, qu'un client peut choisir d'utiliser ou d'ignorer.

http://dev.mysql.com/doc/refman/5.5/en/numeric-type-attributes.html

7
spencer7593