Qual é o número de telefone mundial mais longo possível que devo considerar no SQL varchar (comprimento) para telefone

200

Qual é o número de telefone mundial mais longo possível que devo considerar no SQL varchar(length)para telefone.

considerações:

  • + para código do país
  • () para código de área
  • x + 6 números para o ramal de extensão (então, faça 8 {espaço})
  • espaços entre grupos (ou seja, em telefones americanos + x xxx xxx xxxx = 3 espaços)
  • aqui é onde eu preciso da sua ajuda, quero que seja mundial

Considere que, no meu caso particular, agora, não preciso de cartões, etc. O número começa com o código do país e termina com o ramal, sem comentários de fax / telefone etc., nem itens necessários para cartões de chamada.

Shimmy Weitzhandler
fonte
1
Eu acho que converter o número em valor longo seria uma boa solução, e vai precisar apenas de 64 bits espaço, eu tenho usado isso há anos, sem problemas
3
15 dígitos: en.wikipedia.org/wiki/Telephone_numbering_plan
ma11hew28 28 de
1
@MattDiPasquale já mencionado aqui , mas obrigado!
Shimmy Weitzhandler
2
Certo, mas essa resposta não incluiu o link que eu dei. De nada. :-)
ma11hew28

Respostas:

79

Bem, considerando que não há diferença entre um varchar (30) e um varchar (100) se você estiver armazenando apenas 20 caracteres em cada um, erre no lado da cautela e faça 50.

cleto
fonte
26
Apenas pelo conhecimento: então, quando há alguma sobrecarga? inclua uma fonte na sua resposta, para que possamos seguir em frente e aprender o básico dela.
Shimmy Weitzhandler
6
Eu sei que deveria ser o caso, mas nem sempre. No MySQL (por exemplo), o comprimento total é usado para classificação. É melhor aplicar pelo menos algum esforço mínimo.
Morgan Tocker
15
Não há diferença de tamanho de armazenamento entre os dois tamanhos de coluna. É muito provável que haja uma sobrecarga, significativa ou não, dependendo do seu banco de dados específico. O SQL Server, por exemplo, perde muita capacidade de prever tamanhos de páginas de dados e otimizar acessos e alinhamentos dessa maneira. Como sempre, teste.
Matt Enright
16
Otimização prematura é a raiz de todo o mal.
Harindaka
78
Generalizações plausíveis são ainda piores. Projetar um sistema com otimização em mente nunca é mau por si só - a otimização se torna má quando se dedica uma quantidade excessiva de tempo a eficiências desnecessárias, imperceptíveis e menores.
jbowman
167

Supondo que você não armazene coisas como '+', '()', '-', espaços e o que você tem (e por que você faria isso, são preocupações de apresentação que variam de acordo com os costumes locais e as distribuições de rede de qualquer maneira), a recomendação E.164 da ITU-T para a rede telefônica internacional (na qual a maioria das redes nacionais está conectada) especifica que o número inteiro (incluindo o código do país, mas não incluindo prefixos como o prefixo de chamada internacional necessário para discagem, que varia de país para país, nem que inclua sufixos, como números de extensão PBX) tenham no máximo 15 caracteres .

Os prefixos de chamada dependem do chamador, não do chamado e, portanto, não devem (em muitas circunstâncias) ser armazenados com um número de telefone. Se o banco de dados armazenar dados para um bloco de endereços pessoal (nesse caso, armazenar o prefixo de chamada internacional faz sentido), os prefixos internacionais mais longos com os quais você teria que lidar (de acordo com a Wikipedia ) são atualmente de 5 dígitos, na Finlândia.

Quanto aos sufixos, alguns PBXs suportam extensões de até 11 dígitos (novamente, de acordo com a Wikipedia ). Como os números de ramal de PBX fazem parte de um plano de discagem diferente (os PBXs são separados das trocas das empresas de telefonia), os números de ramal precisam ser distinguíveis dos números de telefone, com um caractere separador ou armazenando-os em uma coluna diferente.

Matt Enright
fonte
5
Se você não estiver armazenando os caracteres de formato (como '+', '(', ')', '-' e '') e estiver armazenando números de diferentes países, adicione uma coluna para indicar o formato tipo do número para quando o número é exibido.
Trisped
38
Conclusão: 15caracteres. Se estiver armazenando prefixo e sufixo, a linha inferior é: 5 + 15 + 11 = 31.
AlikElzin-kilaka
3
@ MattEnright, acho que você deve atualizar o comentário de AlikElzin em sua resposta.
Shimmy Weitzhandler
4
'+' não é uma apresentação pt.wikipedia.org/wiki/List_of_international_call_prefixes
qubodup
17

Na especificação GSM 3GPP TS 11.11 , há 10 bytes reservados no MSISDN EF (6F40) para 'número de discagem'. Como essa é a representação GSM de um número de telefone e seu uso é trocado de petiscos (e sempre há a possibilidade de parênteses), 22 caracteres de dados devem ser suficientes.

Na minha experiência, existe apenas uma instância de parênteses de abertura / fechamento, que é o meu raciocínio para o exposto acima.

KevinDTimm
fonte
10

É um pouco pior, eu uso um cartão de chamada para ligações internacionais, portanto, o número local nos EUA + conta # (6 dígitos) + pino (4 dígitos) + "pausa" + o que você descreveu acima.

Eu suspeito que pode haver outros casos

webclimber
fonte
2
Você entendeu muito bem. Eu adicionei algumas linhas à minha msg, pls ler
Shimmy Weitzhandler
10
Porém, a rediscagem do cartão de chamada não deve estar no banco de dados - esta é a parte que é adicionada ao discar de acordo com as regras de discagem. Os números armazenados devem estar no formato ISO, sem nenhuma informação relacionada à discagem.
TomTom