Siempre he usado VARCHAR(320)
. Este es el por qué. El estándar dicta las siguientes limitaciones:
- 64 caracteres para la "parte local" (nombre de usuario).
- 1 carácter para el
@
símbolo.
- 255 caracteres para el nombre de dominio.
Ahora, algunas personas dirán que necesitas apoyar más que eso. Algunas personas también dirán que debe admitir Unicode para los nombres de dominio (lo que significa que debe cambiar a NVARCHAR
). Si bien el estándar puede cambiar mientras tanto (ha pasado un tiempo desde que tuve la máscara en el juego), estoy bastante seguro de que en este momento la mayoría de los servidores del mundo no aceptarán direcciones de correo electrónico Unicode, y estoy seguro muchos servidores tendrán problemas para crear y / o aceptar direcciones con> 320 caracteres.
Dicho esto, puede prepararse para lo peor ahora, si lo desea (y si está utilizando Compresión de datos en SQL Server 2008 R2 o superior, se beneficiará de la compresión Unicode, lo que significa que solo paga la penalización de 2 bytes por los caracteres que realmente necesitan eso). De esta manera, puede hacer que su columna sea lo más amplia que desee, y puede dejar que la gente llene cualquier basura demasiado larga allí que quieran; no recibirán un correo electrónico si le dan basura como no lo harán. recibir un correo electrónico si falla la inserción. El problema es que si se deja basura válida en, ustedtiene que lidiar con eso. Y no importa de qué tamaño lo hagas: si alguien intenta meter 400 caracteres en una columna de 320 caracteres, alguien intentará meter 1025 caracteres en una columna de 1024 caracteres. No hay ninguna razón por la que una persona sensata deba tener una dirección de correo electrónico> 320 caracteres a menos que la esté usando para probar explícitamente los límites del sistema.
Pero deje de pedir opiniones sobre esto, y deje de buscar otras implementaciones para obtener orientación (solo sucede que en este caso las que mencionó no se molestaron en hacer su propia tarea y simplemente seleccionaron números de sus, bueno, ya sabes) . Tiene acceso directo al estándar : asegúrese de consultar la versión más reciente, admitirlo como mínimo y mantenerse al tanto del estándar para que pueda adaptarse a los cambios en las especificaciones.
EDITAR gracias a @ypercube por el ping en el chat.
Como comentario, quizás no desee volcar la dirección completa en una sola columna en primer lugar. La normalización puede sugerir que no desea almacenar @hotmail.com
15 millones de veces cuando un FK int mucho más delgado funcionaría bien y no tendría la sobrecarga adicional de las columnas de longitud variable. También puede normalizar el nombre de usuario john.smith@hotmail.com
y john.smith@gmail.com
compartir un nombre de usuario común: no se conocen pero a su base de datos no le importa.
Hablé sobre algo de esto aquí:
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/
http://www.mssqltips.com/sqlservertip/2671/storing-email-addresses-more-efficiently-in-sql-server--part-2/
Sin embargo, esto presenta desafíos al límite de 254 caracteres anterior, ya que no parece haber consenso sobre lo que sucede cuando un dominio válido de 255 caracteres se combina con una parte local válida de 1 carácter. Esto debería ser aceptado por la mayoría de los servidores de todo el mundo, pero parece violar este límite de 254 caracteres. Entonces, ¿creas una Domains
tabla que tenga una restricción artificialmente menor en la longitud de las direcciones de correo electrónico, cuando el dominio podría reutilizarse como una URL válida de 255 caracteres?