¿Cuál es el número de teléfono mundial más largo posible que debería considerar en SQL varchar (longitud) para teléfono

200

¿Cuál es el número de teléfono mundial más largo posible que debería considerar en SQL varchar(length)para teléfono?

consideraciones:

  • + para código de país
  • () para código de área
  • x + 6 números para extensión de extensión (así que hágalo 8 {espacio})
  • espacios entre grupos (es decir, en teléfonos estadounidenses + x xxx xxx xxxx = 3 espacios)
  • aquí es donde necesito tu ayuda, quiero que sea mundial

Tenga en cuenta que en mi caso particular ahora, no necesito tarjetas, etc. El número comienza con el código del país y termina con la extensión, no se necesitan comentarios de fax / teléfono, etc.

Shimmy Weitzhandler
fuente
1
Creo que convertir el número en un valor largo sería una buena solución, y solo necesitará un espacio de 64 bits, lo he estado usando durante años, no hay problema
1
@MattDiPasquale ya mencionado aquí , pero gracias!
Shimmy Weitzhandler
2
Correcto, pero esa respuesta no incluyó el enlace que le di. De nada. :-)
ma11hew28

Respuestas:

79

Bueno, teniendo en cuenta que no hay una diferencia general entre un varchar (30) y un varchar (100) si solo está almacenando 20 caracteres en cada uno, erre por precaución y solo sea 50.

cletus
fuente
26
Solo por el conocimiento: entonces, ¿cuándo hay gastos generales? incluya una fuente en su respuesta, para que podamos seguir adelante y aprender los conceptos básicos.
Shimmy Weitzhandler
66
Sé que ese debería ser el caso, pero no siempre es así. En MySQL (por ejemplo), la longitud completa se usa para ordenar. Es mejor aplicar al menos un esfuerzo mínimo.
Morgan Tocker
15
No hay diferencia de tamaño de almacenamiento entre los dos tamaños de columna. Es muy probable que haya una sobrecarga, significativa o no, dependiendo de su base de datos particular. SQL Server, por ejemplo, pierde mucha capacidad para predecir los tamaños de página de datos y optimizar los accesos y la alineación de esta manera. Como siempre, prueba.
Matt Enright
16
La optimización prematura es la fuente de todos los males.
Harindaka
78
Las generalizaciones altitudinales son aún peores. Diseñar un sistema con la optimización en mente nunca es malo per se : la optimización se vuelve malvada cuando uno dedica una cantidad excesiva de tiempo a eficiencias innecesarias, imperceptibles y menores.
jbowman
167

Asumiendo que no almacena cosas como '+', '()', '-', espacios y lo que tiene (y por qué lo haría, son preocupaciones de presentación que variarían según las costumbres locales y las distribuciones de red de todos modos), la recomendación UIT-T E.164 para la red telefónica internacional (a través de la cual se conectan la mayoría de las redes nacionales) especifica que el número completo (incluido el código de país, pero sin incluir los prefijos como el prefijo de llamada internacional necesario para marcar, que varía de un país a otro, sin incluir sufijos, como los números de extensión de PBX) debe tener como máximo 15 caracteres .

Los prefijos de llamada dependen de la persona que llama, no de la persona que llama, y ​​por lo tanto no deben (en muchas circunstancias) almacenarse con un número de teléfono. Si la base de datos almacena datos para una libreta personal de direcciones (en cuyo caso, almacenar el prefijo de llamada internacional tiene sentido), los prefijos internacionales más largos con los que tendría que tratar ( según Wikipedia ) son actualmente 5 dígitos, en Finlandia.

En cuanto a los sufijos, algunas PBX admiten extensiones de hasta 11 dígitos (de nuevo, según Wikipedia ). Dado que los números de extensión de PBX son parte de un plan de marcación diferente (las PBX están separadas de los intercambios de las compañías telefónicas), los números de extensión deben distinguirse de los números de teléfono, ya sea con un carácter separador o almacenándolos en una columna diferente.

Matt Enright
fuente
55
Si no está almacenando los caracteres de formato (como '+', '(', ')', '-' y '') y está almacenando números de diferentes naciones, puede agregar una columna para indicar el formato tipo del número para cuando se muestra el número.
Trisped
38
En pocas 15palabras : caracteres. Si almacena el prefijo y el sufijo, la conclusión es: 5 + 15 + 11 = 31.
AlikElzin-kilaka
3
@ MattEnright, creo que deberías actualizar el comentario de AlikElzin en tu respuesta.
Shimmy Weitzhandler
44
'+' no es presentacional es.wikipedia.org/wiki/List_of_international_call_prefixes
qubodup
17

En la especificación GSM 3GPP TS 11.11 , hay 10 bytes reservados en el MSISDN EF (6F40) para 'número de marcación'. Dado que esta es la representación GSM de un número de teléfono, y su uso se intercambia, (y siempre existe la posibilidad de paréntesis) 22 caracteres de datos deberían ser suficientes.

En mi experiencia, solo hay una instancia de paréntesis de apertura / cierre, ese es mi razonamiento para lo anterior.

KevinDTimm
fuente
10

Es un poco peor, utilizo una tarjeta de llamadas para llamadas internacionales, por lo que su número local en los EE. UU. + Número de cuenta (6 dígitos) + pin (4 dígitos) + "pausa" + lo que describió anteriormente.

Sospecho que puede haber otros casos

webclimber
fuente
2
Tienes un muy buen punto.
Agregué
10
Sin embargo, la rellamada de la tarjeta de llamada no debe estar en la base de datos: esta es la parte que se agrega al marcar de acuerdo con las reglas de marcado. Los números almacenados deben estar en formato ISO, sin ninguna información relacionada con el marcado.
TomTom