J'ai des questions sur la meilleure solution pour stocker le code de numéro p>
(Exemple: 1234123412341234). p>
Ce code a toujours 16 caractères et est une valeur numérique! P>
J'utilise un moteur InnoDB pour stocker la table P>
Actuellement, j'ai le type de colonne Varchar (16) mais j'ai des pensées si Bigint est mieux pour cela. P>
Le code de colonne n'est pas modifié après ajouté à la base de données. P>
3 Réponses :
Bigint nécessite 8 octets pour stocker un nombre, tandis que Varcharate (16) nécessitera au minimum la double quantité d'octets. Selon le jeu de caractères utilisé, même 4 fois plus. Donc, le type de Bigint permettra d'économiser de l'espace sur votre disque, mais réduisez également le trafic réseau. P> li>
Un Varchar (16) ne sera pas en mesure de représenter tous les nombres de Bigint. Une plus grande valeur de 0xFFFFFFFFFFFFFFFFE ne peut pas être stockée dans une colonne Varcharchar (16). P> Li>
au niveau de la machine, une comparaison de 16 octets se produit généralement en un cycle, tandis que la comparaison des chaînes est beaucoup plus chère, car Varcharre nécessite un octet à la comparaison des octets. P> LI> ul>
Vous devez choisir le type de données en fonction des données que vous avez. p>
Par exemple, un numéro de carte de crédit est une chaîne de caractères (même si elle contient des chiffres), un numéro de téléphone est également une chaîne de caractères (car la chaîne peut par exemple avoir des zéros de premier plan, etc.). p>
Un numéro avec la valeur numérique doit être stocké sous forme de nombre (une distance de la lune par exemple). P>
La question clé à poser est quelles opérations avez-vous besoin de faire sur les données em>? p>
Il est très rare qu'un seul morceau de données nécessite à la fois ces types d'opérations. Par exemple, vous voudrez peut-être rechercher tous les numéros de téléphone commençant "1800", mais n'aurait jamais besoin de diviser un numéro de téléphone par 3. P>
Ainsi, lorsque vous dites que vos données sont un "code de numéro", vous devez penser si cette valeur est en réalité un numéro ou juste une chaîne qui est tous des chiffres. P>
Bigint code> peut être utilisé avec des opérations telles que l'addition, la soustraction, la multiplication, la division. Les valeurs seront normalisées de sorte que
1 code>,
001 code>,
1.0 code>, etc sera tous stocké identique. Li>
varchar code> peut être utilisé avec des opérations telles que des correspondances sous-chaînes. Il peut stocker des valeurs telles que
0001 code> sans les normaliser. Li>
ul>
Si la valeur va toujours être un nombre entier, et ce n'est pas supérieur à
(2 ^ 64) -1 code> (qui est assez grand pour vous), puis en utilisant un Bigint sera meilleur.
Si vous souhaitez des chiffres, utilisez un format de numéro. Les chaînes doivent être coulées à des chiffres.
Cela ne fait vraiment aucune différence (ou presque aucune différence)