Ben her zaman kullandım VARCHAR(320)
. İşte nedeni. Standart , aşağıdaki sınırlamaları belirler:
- "Yerel kısım" için 64 karakter (kullanıcı adı).
@
Sembol için 1 karakter .
- Etki alanı adı için 255 karakter.
Şimdi, bazı insanlar bundan daha fazlasını desteklemeniz gerektiğini söyleyecek. Bazı kişiler, etki alanı adları için Unicode'u desteklemeniz gerektiğini söyler (yani, geçiş yapmalısınız NVARCHAR
). Bu süre zarfında standart değişebilirken (oyunda derim olduğundan beri uzun zaman geçti), şu anda dünyadaki çoğu sunucunun Unicode e-posta adreslerini kabul etmeyeceğinden eminim ve eminim Birçok sunucunun> 320 karakterden oluşan adresler oluşturma ve / veya kabul etme sorunları olacaktır.
Bununla birlikte, eğer isterseniz (ve SQL Server 2008 R2'de Data Compression kullanıyorsanız veya daha iyisi kullanıyorsanız), Unicode sıkıştırmasından faydalanacaksınız, yani gerçekten ihtiyaç duyan karakterler için sadece 2 bayt ceza ödeyeceksiniz. o). Bu şekilde sütununuzu istediğiniz kadar geniş hale getirebilirsiniz ve insanların orada istedikleri kadar uzun çöpleri doldurmalarına izin verebilirsiniz - tıpkı sizin gibi çöpler vermezlerse e-posta almazlar başarısız olursa bir e-posta alırsınız. Sorun, geçersiz önemsiz içeri girmenize izin verirseniz,başa çıkmak zorundayım. Ve ne boyutta olursanız olun - biri 320 karakterlik bir sütuna 400 karakter girmeye çalışacaksa, biri 1024 karakterlik bir sütuna 1025 karakter girmeye çalışacaktır. Herhangi bir mantıklı insanın, sistem sınırlarını açıkça test etmek için kullanmıyorlarsa,> 320 karakterden oluşan bir e-posta adresine sahip olmaları için hiçbir neden yoktur.
Ancak bunun hakkında fikir sormayı bırak - rehberlik için başka uygulamalara bakmayı bırak (bu durumda, referansta bulunduklarıların kendi ev ödevlerini yapmak için zahmet etmemiş olmaları ve sadece sayıları topladıkları, yani, bilirsin) . Standarda doğrudan erişime sahipsiniz - en güncel sürüme başvurduğunuzdan, minimum desteklediğinizden ve standardın üzerinde kaldığınızdan emin olun, böylece özellik değişikliklerine uyum sağlayabilirsiniz.
EDIT sohbetinde ping için @ypercube sayesinde EDIT .
Bir yana, belki de tüm adresi ilk etapta tek bir sütuna dökmek istemezsiniz. Normalleştirme, @hotmail.com
çok daha ince bir FK int'nin iyi çalışacağı ve ek değişken uzunluklu sütun ek yüküne sahip olmadığında 15 milyon kez saklamak istemediğinizi önerebilir . Ayrıca, kullanıcı adını normalleştirebilir john.smith@hotmail.com
ve john.smith@gmail.com
ortak bir kullanıcı adını paylaşabilirsiniz - birbirlerini tanımıyorlar ancak veritabanınız bunu umursamıyor.
Bunlardan bazılarını burada konuştum:
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/
Bununla birlikte, yukarıdaki 254 karakter sınırına zorluklar getirmektedir, çünkü geçerli bir 255 karakterli alan, geçerli bir 1 karakterli yerel bölümle birleştirildiğinde ne olduğu konusunda fikir birliğine varılmış gibi görünmemektedir. Bu, dünyadaki çoğu sunucu tarafından kabul edilmelidir, ancak bu 254 karakterlik sınırı ihlal ediyor gibi görünmektedir. Yani bir oluşturabilirim Domains
alanı zaman, e-posta adresleri için uzunluğuna yapay olarak düşük kısıtlama var tabloyu olabilir geçerli bir 255 karakterlik URL olarak yeniden kullanılabilir?