tipos tipo telefono porcentaje para electronico ejemplos datos dato correo mysql types phone-number street-address

telefono - tipos de datos en mysql pdf



tipo de datos mysql para el número de teléfono y la dirección (10)

Bueno, personalmente no uso el tipo de datos numéricos para almacenar números telefónicos o información relacionada.

¿Cómo almacena un número, por ejemplo 001234567? Terminará como 1234567, perdiendo los ceros a la izquierda.

Por supuesto, siempre puedes hacer un "left-pad", pero eso está provisto de que sabes exactamente cuántos dígitos debe tener el número.

Esto no responde a tu publicación completa,
Solo mis 2 centavos

Quiero ingresar el número de teléfono en un formulario, incluyendo el código de país, la extensión

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

Si tel_number es más grande que 15 bit, ¿qué tipo de datos puedo usar, será mejor que use Bigint(20) ?

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

Por ejemplo, si tengo un código de país para Canadá, puedo usar +2 o 002. ¿Cuál es mejor para procesar?

Gracias por su consejo.


Considere la posibilidad de normalizar al formato E.164 . Para obtener asistencia internacional completa, necesitaría un VARCHAR de 15 dígitos.

Consulte la recomendación de Twilio para obtener más información sobre la localización de números telefónicos.


En realidad, puedes usar un varchar para un número de teléfono. No necesita una int porque no va a realizar aritmética en los números.


Guárdelos como dos campos para los números de teléfono: un "número" y una "máscara" como TinyText que no necesitan más de 255 elementos .

Antes de almacenar los archivos, analizamos el número de teléfono para obtener el formato que se ha usado y que crea la máscara, luego almacenamos el número a solo dígitos, por ej.

Entrada: (0123) 456 7890
Número: 01234567890
Máscara: (nnnn)_nnn_nnnn

Teóricamente, esto nos permite realizar búsquedas de comparación en el campo Número, como obtener todos los números de teléfono que comienzan con un código de área específico, sin tener que preocuparnos de cómo fue ingresado por los usuarios.


INT (10) no significa un número de 10 dígitos, significa un entero con un ancho de visualización de 10 dígitos. El valor máximo para una INT en MySQL es 2147483647 (o 4294967295 si no está firmado).

Puede usar un BIGINT en lugar de INT para almacenarlo como un valor numérico. El uso de BIGINT le ahorrará 3 bytes por fila en VARCHAR (10).

Para almacenar "País + área + número por separado". Puedes intentar usar un VARCHAR (20), esto te permite almacenar números de teléfono internacionales de manera adecuada, si fuera necesario.


No estoy seguro de si es una buena idea usar números enteros. Algunos números pueden contener caracteres especiales (# como parte de la extensión, por ejemplo) que también debería poder manejar. Entonces sugeriría usar varchar en su lugar.


Por lo general, almaceno números de teléfono como BIGINT en formato E164.

E164 nunca comienza con un 0, siendo los primeros dígitos el código de país.

+441234567890 +44 (0)1234 567890 01234 567890

etc. se almacenaría como 441234567890 .


Si almacena menos de 1 mil registros, y el alto rendimiento no es un problema, elija varchar (20) / char (20); de lo contrario, he descubierto que para almacenar incluso 100 millones de teléfonos comerciales o teléfonos personales internacionales, int es lo mejor. Motivo: tecla más pequeña -> mayor velocidad de lectura / escritura, también el formato permite duplicados.

1 teléfono en char (20) = 20 bytes vs 8 bytes bigint (o 10 vs 4 bytes int para teléfonos locales, hasta 9 dígitos), menos entradas pueden ingresar al bloque de índice => más bloques => más búsquedas, vea this para más información (escrito para Mysql pero debería ser cierto para otras bases de datos relacionales).

Aquí hay un ejemplo de tablas telefónicas:

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

o con procesamiento / división antes del inserto (2 + 2 + 4 + 1 = 9 bytes)

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 ;

Además, "el número de teléfono no es un número", en mi opinión es relativo al tipo de números de teléfono. Si hablamos de un directorio de teléfonos móviles internos, las cadenas están bien, ya que el usuario puede desear almacenar los códigos hash GSM . Si almacena teléfonos E164 , bigint es la mejor opción.


Varchar o texto deberían ser los mejores tipos de datos para almacenar números móviles, supongo.


Yo usaría un varchar para números de teléfono. de esa manera también puede almacenar + y (), lo que a veces se ve en los números de teléfono (como usted mismo mencionó). y no tiene que preocuparse por usar todos los bits en enteros.