Stockage des zéros d'entiers en base de données MySQL comme un ENTIER

J'ai besoin de MySQL pour stocker les valeurs dans un champ de type entier et maintenir les zéros non significatifs. Je ne peux pas utiliser l'option zerofill ne que mon champ est de type Bigint(16), et les chiffres peuvent varier d'un montant de zéros. C'est à dire: 0001 - 0005, puis 008 - 010 peuvent avoir besoin d'être stockées. Je ne m'inquiète pas à propos de l'unicité de chiffres (ce ne sont pas utilisés comme Identifiants ou rien), mais j'ai encore besoin d'eux pour être stockées de préférence comme INTS.

Le problème à l'aide de CHAR/VARCHAR et puis typecasting les valeurs des entiers en PHP signifie que le tri des résultats par le biais de requêtes conduit à le tri alphanumérique, c'est à dire: TRIER PAR nombre ASC serait de produire des

001
002
003
1
100
101
102
2

Clairement pas dans l'ordre numérique, mais dans l'ordre alphabétique, ce qui n'est pas voulu.

L'espoir pour certains intelligente des solutions de contournement 🙂

  • les entiers n'ont pas les zéros à gauche. Seuls les représentations de chaîne d'eux peut. Donc, si vous avez "besoin" zéros, vous aurez à stocker une représentation sous forme de chaîne. Pourquoi ne pouvez-vous pas faire ce genre de mise en forme au moment de l'affichage, plutôt que de le mettre dans la base de données?
  • 1 et 001 et des valeurs différentes. Mais comme int, elles sont les mêmes: comment devraient-ils être triés et comparé? comme int ou varchar?
InformationsquelleAutor Michael | 2011-07-29