Base de donnees stocker des nombres en base autre que 10

a marqué ce sujet comme résolu.

Bonjour,

J’ai récemment lu un article mentionnant l’usage de la base 36 pour raccourcir les id dans les urls et ça m’a amené à me demander s’il était possible de stocker des nombres en base 36 (ou autre base) dans une base de données (je ne cible pas de SGBD en particulier)…

Merci d’avance,

@flopy78

+0 -0

Salut,

Les données sont fondamentalement sauvegardées sous forme de bits, et la façon la plus compacte de sauvegarder un nombre entier sous forme de bits est simplement de l’enregistrer avec des bits qui correspondent à sa représentation binaire (plus un bit de signe si besoin).

La base 36 dans les URL vient du fait qu’une url est au format textuel, et on préfère utiliser des caractères lisibles plutôt que des bytes arbitraires. Si les url contiennent des grands nombres (comme des hash pour retrouver les ressources facilement côté serveur), ça fait vite des url à rallonge. Les écrire en base 36 (les chiffres plus les 26 lettres en ascii) permet d’utiliser moins de caractères pour le même nombre qu’écrit en base 10 par exemple. Mais stocker un nombre sur le disque sous forme de bytes qui correspondent à la représentation textuelle en base 36 du nombre serait du gâchis, on utiliserait seulement 36 des 256 valeurs possibles de chaque byte !

Salut,

La base 36 (ou autre variante plus exotique) n’est intéressante que pour raccourcir la représentation graphique d’un nombre, son écriture « lisible » pour les humains (ou au moins, copiable).

Une base de données, si tu utilises le bon type, va stocker directement le nombre lui-même, et pas une représentation graphique. Sous réserve d’avoir utilisé le type adapté, tu ne pourras pas faire plus optimisé que ça, que ce soit en terme de mémoire utilisée ou d’efficacité des index associés.

Dans l’absolu, c’est possible.
Par contre, s’il n’y a pas de champ prévu pour ça c’est inutile : tu vas probablement stocker des varying char pour un octet par caractère et donc ne pas faire aussi court que le nombre dans sa représentation native (selon que c’est du integer ou du float) …en plus de ne plus pouvoir faire de calcul dessus.
Pour la taille, tu pourrais t’en sortir en sauvegardant des bits, si le gestionnaire de bases permet d’avoir des binary aussi fin, mais il faut que tu te tapes les conversions qui vont bien avant d’enregistrer et après avoir récupéré les champs (et toujours pas d’opération native possible : faut réinventer toutes les roues.)

+0 -0

Presque… Ta question initiale était :

stocker des nombres en base 36

Si tu veux stocker des URL (ou juste des fragments) ça peut être différent : ce n’est plus juste des nombres :) Il faut vraiment utiliser le stockage disponible qui convient à ton besoin.

faire la conversion en base 36 au moment de la génération de l’url…

Si l’adresse est transformée avant enregistrement, il te faudra faire la conversion pour l’utiliser/restituer.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte