Question

Je veux le numéro de téléphone d'entrée sous une forme, y compris le code de pays, l'extension

create table if not exists employee(    `   
      country_code_tel   int(11),
      tel_number         int(10),
      extension          int(10),
      mobile             bigint(20)
);

Si tel_number est supérieur à 15 bits, ce qui datatype puis-je utiliser, je ferais mieux Bigint(20) utilisation?

create table address(
      address           varchar(255),  
      city              varchar(255),
      country           varchar(255),
      post_code         int(11)
);

Par exemple, si j'ai un code de pays pour le Canada que je peux utiliser 2 ou 002. Quel est le meilleur pour le traitement?

Merci pour vos conseils.

Était-ce utile?

La solution

Eh bien, personnellement, je ne l'utilise pas pour stocker numérique type de données des numéros de téléphone ou d'informations connexes.

Comment conserver un certain nombre dire 001234567? Il finira comme 1234567, perdant les zéros.

Bien sûr, vous pouvez toujours-pad laissé, mais qui est fourni, vous savez exactement combien de chiffres le nombre devrait être.

Cela ne répond pas à votre poste entier,
Juste mes 2 cents

Autres conseils

En fait, vous pouvez utiliser un varchar pour un numéro de téléphone. Vous n'avez pas besoin d'un int parce que vous n'allez effectuer des opérations arithmétiques sur les nombres.

les stocker sous forme de deux champs pour les numéros de téléphone -. Un « numéro » et un « masque », comme les types de TinyText qui ne ont pas besoin de plus de 255 articles

Avant stocker les fichiers que nous analysons le numéro de téléphone pour obtenir la mise en forme qui a été utilisé et qui crée le masque, nous avons ensuite enregistrer le numéro un chiffres que par exemple.

Entrée: (0123) 456 7890
Nombre: 01234567890
Masque: (nnnn)_nnn_nnnn

Théoriquement, cela nous permet d'effectuer des recherches de comparaison sur le champ Numéro tels que d'obtenir tous les numéros de téléphone commençant par un indicatif régional spécifique, sans avoir à se soucier comment il a été saisie par les utilisateurs

I généralement les numéros de téléphone de magasin comme BIGINT au format E164.

E164 ne jamais commencer par 0, avec les premiers chiffres étant le code du pays.

+441234567890
+44 (0)1234 567890
01234 567890

etc. seraient stockés sous forme 441234567890.

Je voudrais utiliser un varchar pour les numéros de téléphone. De cette façon vous pouvez également stocker + et (), qui est parfois vu dans les numéros de téléphone: (comme vous avez mentionné). et vous n'avez pas à vous soucier d'utiliser tous les bits en entiers.

Je ne suis pas sûr que ce soit une bonne idée d'utiliser des entiers du tout. Certains chiffres peuvent contenir des caractères spéciaux (# dans le cadre de l'extension par exemple) que vous devriez être capable de gérer aussi. Donc, je suggère d'utiliser à la place varchars.

Si le stockage moins de 1 enregistrements de mil et de haute performance n'est pas un problème aller varchar (20) / char (20) sinon j'ai trouvé que pour le stockage même 100 milion téléphones d'affaires global ou les téléphones personnels, int est le meilleur . Motif:. Petite clé -> une plus grande vitesse de lecture / écriture, le formatage peut également permettre à des doublons

1 téléphone char (20) = 20 octets vs 8 octets bigint (ou 10 vs 4 octets int pour téléphones locaux, jusqu'à 9 chiffres), moins les entrées peuvent entrer dans le bloc d'index => plusieurs blocs => plus de recherches, voir cette pour plus d'informations (pour Mysql mais writen il devrait être vrai pour d'autres bases de données relationnelles).

Voici un exemple de tableaux de téléphone:

CREATE TABLE `phoneNrs` (   
    `internationalTelNr` bigint(20) unsigned NOT NULL COMMENT 'full number, no leading 00 or +, up to 19 digits, E164 format',
    `format` varchar(40) NOT NULL COMMENT 'ex: (+NN) NNN NNN NNN, optional',
    PRIMARY KEY (`internationalTelNr`)
    )
DEFAULT CHARSET=ascii
DEFAULT COLLATE=ascii_bin

ou avec traitement / séparation avant insert (2 + 2 + 4 + 1 = 9 octets)

CREATE TABLE `phoneNrs` (   
    `countryPrefix` SMALLINT unsigned NOT NULL COMMENT 'countryCode with no leading 00 or +, up to 4 digits',
    `countyPrefix` SMALLINT unsigned NOT NULL COMMENT 'countyCode with no leading 0, could be missing for short number format, up to 4 digits',
    `localTelNr` int unsigned NOT NULL COMMENT 'local number, up to 9 digits',
    `localLeadingZeros` tinyint unsigned NOT NULL COMMENT 'used to reconstruct leading 0, IF(localLeadingZeros>0;LPAD(localTelNr,localLeadingZeros+LENGTH(localTelNr),'0');localTelNr)',
    PRIMARY KEY (`countryPrefix`,`countyPrefix`,`localLeadingZeros`,`localTelNr`)  -- ordered for fast inserts
) 
DEFAULT CHARSET=ascii
DEFAULT COLLATE=ascii_bin
;

En outre « le numéro de téléphone est pas un numéro », à mon avis, est par rapport au type de numéros de téléphone. Si nous parlons d'un mobile interne phoneBook, puis les cordes sont très bien, que l'utilisateur voudra peut-être stocker codes GSM Hash . Si le stockage E164 téléphones, bigint est la meilleure option.

Pensez normalisant au format E.164 de. Pour soutien international, vous auriez besoin d'un VARCHAR de 15 chiffres.

Voir la recommandation de Twilio pour plus d'informations sur la localisation des numéros de téléphone.

INT (10) ne signifie pas un nombre à 10 chiffres, cela signifie un nombre entier ayant une largeur d'affichage de 10 chiffres. La valeur maximale pour un INT dans MySQL est 2147483647 (4294967295 ou si non signé).

  

Vous pouvez utiliser un BIGINT au lieu de l'INT pour l'enregistrer en tant que numérique. En utilisant   BIGINT vous permettra d'économiser 3 octets par ligne sur VARCHAR (10).

Enregistrer « Pays + + numéro séparément ». Vous pouvez essayer d'utiliser un VARCHAR (20), ce qui vous permet la possibilité de stocker les numéros de téléphone internationaux correctement, devrait-il besoin.

varchar ou texte devraient être les meilleurs types de données pour stocker les numéros mobiles, je suppose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top