J'ai besoin d'un type de données pour stocker cette plage: [0 - 9]. Quelque chose comme ça:

+-----+
| col |
+-----+
| 3   |
| 2   |
| 8   |
| 0   |
| 2   |
| 1   |
+-----+

Quel type de données est le meilleur dans ce cas?

7
Shafizadeh 5 janv. 2016 à 02:31

3 réponses

Meilleure réponse

Malgré la documentation, je ne sais pas si la taille d'un DECIMAL(1,0) est "arrondie" à quatre octets ou si le chiffre unique compte comme un "chiffre restant", résultant en une largeur d'un seul octet pour tout le type de données.

Quoi qu'il en soit, vous ne pouvez pas utiliser moins d'espace qu'un TINYINT, car a TINYINT fait un octet de large, et un octet est la plus petite unité de données sur un ordinateur (sans entrer dans le bitpacking, ce qui ne semble pas plausible sur les données tabulaires!).

Donc, parmi les types numériques, utilisez un TINYINT. Tout le reste est un obscurcissement inutile.

Cela étant dit, je suis un grand fan des ENUM s, et cela semble être un cas parfait pour eux. Étant donné que votre énumération aurait moins de 255 valeurs possibles, comme un {{ X1}} cela ne prendrait qu'un seul octet.

ENUM('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')

Malheureusement, c'est un peu verbeux à écrire. Mais au moins maintenant, vos valeurs sont intrinsèquement limitées par la plage.

8
Lightness Races in Orbit 4 janv. 2016 à 23:57

Vous pouvez le forcer à stocker un seul chiffre en utilisant DECIMAL(1,0).

Voir https://dev.mysql.com/ doc / refman / 5.7 / fr / precision-math-decimal-features.html

2
Lightness Races in Orbit 5 janv. 2016 à 00:01

Vous pouvez utiliser int, bigint, smallint et tinyint en fonction des besoins.

https://msdn.microsoft.com/en-us/library/ms187745.aspx

Vous pouvez peut-être stocker les valeurs dans l'énumération et utiliser la même classe.

@Shafizadeh Je suis nouveau ici et j'ai mentionné d'utiliser enum en premier parmi toutes les réponses, mais ma réponse a été malheureusement marquée négative.

-1
MAK 5 janv. 2016 à 17:47