Aquí hay una parte extraída de mi consulta, que refleja la EMAIL_ADDRESS
propiedad y el tipo de datos de la columna:
EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL,
Sin embargo, John Saunders usa VARYING(256)
.
Esto me sugiere que no necesariamente he entendido la VARIACIÓN correctamente.
Entiendo que la longitud de una dirección de correo electrónico es 20 caracteres en mi caso, mientras que 256 para Jodn.
Contexto en el código de John
CREATE TABLE so."User"
(
USER_ID SERIAL NOT NULL,
USER_NAME CHARACTER VARYING(50) NOT NULL,
EMAIL_ADDRESS CHARACTER VARYING(256) NOT NULL, // Here
HASHED_PASSWORD so.HashedPassword NOT NULL,
OPEN_ID CHARACTER VARYING(512),
A_MODERATOR BOOLEAN,
LOGGED_IN BOOLEAN,
HAS_BEEN_SENT_A_MODERATOR_MESSAGE BOOLEAN,
CONSTRAINT User_PK PRIMARY KEY(USER_ID)
);
Nunca he visto direcciones de correo electrónico de más de 20 caracteres, utilizadas por personas comunes.
¿Cuál es la longitud óptima para una dirección de correo electrónico en una base de datos?
database
performance
email
database-design
Léo Léopold Hertz 준영
fuente
fuente
Respuestas:
La longitud máxima de una dirección de correo electrónico es de 254 caracteres.
Cada dirección de correo electrónico se compone de dos partes. La parte local que viene antes del signo '@' y la parte de dominio que le sigue. En "[email protected]", la parte local es "usuario" y la parte de dominio es "ejemplo.com".
La parte local no debe exceder los 64 caracteres y la parte del dominio no puede tener más de 255 caracteres.
La longitud combinada de las partes del dominio local + @ + de una dirección de correo electrónico no debe exceder los 254 caracteres. Como se describe en RFC3696 Errata ID 1690 .
Obtuve la parte original de esta información de aquí.
fuente
de Ask Metafilter :
Si se registra en http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/ , su dirección de correo electrónico seguramente sería un valor atípico :)
Aquí es ¿Cuál es la longitud máxima de seguridad de una dirección de correo electrónico para permitir que en una forma de sitio web? en Raycon con una media ligeramente diferente (N = 50,496, media = 23):
fuente
Solo usa
varchar(50)
. Los correos electrónicos más largos son una mierda, siempre.Solo mira cuánto duran 50 caracteres:
peoplewithanemail @ ddressthislongjustuseashorterone
Si permite correos electrónicos de 255 caracteres:
(Las estadísticas muestran que nadie ingresa más de 50 caracteres para una dirección de correo electrónico legítima; consulte, por ejemplo, la respuesta de pageman https://stackoverflow.com/a/1199245/87861 )
fuente
¡Mi dirección de correo electrónico del trabajo tiene más de 20 caracteres!
Lea la especificación RFC apropiada :
fuente
Los tipos de caracteres variables en las bases de datos no ocupan espacio innecesario. Por lo tanto, no hay razón para limitar estos campos tanto como sea posible. Dependiendo del nombre de una persona, el esquema de nomenclatura utilizado por su organización y su nombre de dominio, una dirección puede superar fácilmente los 20 caracteres.
No hay límite en cuanto a la longitud de la parte local y el nombre de dominio en RFC-2822 . Sin embargo, RFC-2181 limita el nombre de dominio a 255 octetos / caracteres.
Nuevamente, dado que un varchar solo usa el espacio que realmente usa la cadena que almacena, no hay razón para tener un pequeño límite para la longitud de la dirección de correo electrónico. Vaya con 512 y deje de preocuparse. Todo lo demás es optimización prematura
fuente
Inicialmente, el máximo es de 320 caracteres (64 + 1 + 255, como se muestra en otras respuestas) pero como RFC 3696 Errata 1003 dijo:
Y de RFC 5321 sección 4.5.3.1.3 :
Esto incluye los corchetes de apertura y cierre, por lo que solo nos deja 254 octetos de dirección de correo electrónico.
Pero tenga en cuenta que el número de octetos puede no ser igual al número de caracteres (un carácter puede tener 2 o más octetos). También la sección 4.5.3.1 de RFC dice que puede haber campos de más del máximo y esto es posible pero no garantizado a los servidores para que los capturen correctamente.
Y luego puede / debe usar un
VARCHAR(254)
para almacenar una dirección de correo electrónico.Nota: En MySQL al menos, una columna declarada como
VARCHAR
menor o igual a 255 octetos se almacenará como1 byte + length
(el 1 es para almacenar la longitud) por lo que no se gana espacio si se usa un límite inferior.fuente
Como han dicho otros, mucho más grande que 20. 256 + 64 me suena bien y es compatible con RFC.
La única razón para no tener un valor tan grande para su base de datos es si le preocupa el rendimiento o el espacio, y si lo está haciendo, entonces estoy 99.99999999999999% seguro de que es una optimización prematura .
Ve a lo grande.
fuente
Un campo CHAR (20) siempre ocupará 20 caracteres, ya sea que lo use todo o no. (A menudo se rellena con espacios al final.) Un campo VARCHAR (20) ocupará hasta 20 caracteres, pero puede ocupar menos. Un beneficio del ancho constante de CHAR () es saltar rápidamente a una fila en una tabla, porque puede simplemente calcular el índice en el que debe estar. El inconveniente es desperdiciar espacio.
El beneficio de los CHAR (x) de tamaño constante se pierde si tiene columnas VARCHAR (x) en su tabla. Me parece recordar que MySQL convirtió en silencio cualquier campo CHAR () en VARCHAR () detrás de escena si algunas columnas eran VARCHAR () s.
fuente