एक डेटाबेस में एक ईमेल पते के लिए इष्टतम लंबाई क्या है?


95

यहां EMAIL_ADDRESSकॉलम डेटा प्रकार और संपत्ति को दर्शाते हुए, मेरी क्वेरी का एक निकाला गया हिस्सा है :

EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 

हालांकि, जॉन सॉन्डर्स उपयोग करता है VARYING(256)

इससे मुझे पता चलता है कि मैंने आवश्यक रूप से Varying को सही ढंग से नहीं समझा है।

मैं इसे इस तरह समझता हूं कि मेरे पते की एक ईमेल पते की लंबाई मेरे मामले में २० अक्षर है, जबकि जोबन के लिए २५६ है।

जॉन के कोड में संदर्भ

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)
  );

मैंने कभी भी आम लोगों द्वारा उपयोग किए जाने वाले ईमेल पते को 20 से अधिक वर्णों में नहीं देखा है।

एक डेटाबेस में एक ईमेल पते के लिए इष्टतम लंबाई क्या है?


"इष्टतम" से आपका क्या मतलब है? आप "अनुकूलन" करने के लिए क्या प्रयास कर रहे हैं?
एस.लॉट

1
@ S.Lott: मैं एक सुरक्षित सिस्टम बनाना चाहता हूं। उपयोगकर्ता के इनपुट में वृद्धि से जोखिम बढ़ जाता है कि वे डेटाबेस में कोड चला सकते हैं। --- मैं एक सुरक्षित प्रणाली के लिए सबसे अच्छे तरीके के रूप में इष्टतम देखता हूं।
लेओ लेपोल्ड हर्ट्ज़ o

1
ठीक है, जबकि कुछ अनबिके नहीं बनाने में सुरक्षा के विचार हैं, मानकों का पालन हमेशा सबसे अधिक समझ में आता है। निम्नलिखित "सामान्य" या "इष्टतम" होने की संभावना है कि सुरक्षा के मुद्दों का परिचय होगा, फिर उन्हें कम करें।
किट्सन

1
StackOverflow पर यह प्रश्न बताता है कि अधिकतम लंबाई अब "@" चिह्न सहित 254 वर्ण है: stackoverflow.com/questions/386294/…
dthrasher

1
यहां ईमेल की लंबाई से संबंधित एक पोस्ट
@DominicSayers

जवाबों:


135

एक ईमेल पते की अधिकतम लंबाई 254 अक्षर है।

हर ईमेल पता दो भागों से बना होता है। स्थानीय भाग जो '@' चिह्न से पहले आता है, और इसके बाद आने वाला डोमेन भाग। "User@example.com" में, स्थानीय भाग "उपयोगकर्ता" है, और डोमेन भाग "example.com" है।

स्थानीय भाग 64 वर्णों से अधिक नहीं होना चाहिए और डोमेन भाग 255 वर्णों से अधिक लंबा नहीं हो सकता है।

एक ईमेल पते के स्थानीय + @ + डोमेन भागों की संयुक्त लंबाई 254 वर्णों से अधिक नहीं होनी चाहिए। जैसा कि RFC3696 इरेटा आईडी 1690 में वर्णित है ।

मुझे यहाँ से इस जानकारी का मूल भाग मिला


ऐसा लगता है कि लंबाई के रूप में 320 लेना सबसे अच्छा है।
लेओ लेपोल्ड हर्ट्ज़ o

40
मुझे पता है कि यह एक पुराना धागा है और 320 का उपयोग करने में कोई समस्या नहीं है, लेकिन वास्तविक अधिकतम 254 है जो RFC2821 से ओवरराइड प्रतिबंध के कारण है जो स्थानीय और डोमेन भागों के लिए उद्धृत अतिरिक्त बाधाओं को लगाता है। यदि भंडारण स्थान एक मुद्दा है, तो यह जानने के लायक हो सकता है कि क्या वे इस धागे पर ठोकर खाते हैं। इरेटा आईडी 1690 को इरेटा में RFC3696 पर देखें
HexAndBugs

जैसा कि @flightplanner ने कहा, विकिपीडिया उन वर्गों को यहाँ प्रस्तुत करता है : "लेकिन अधिकतम ... पूरे ईमेल पते को 254 वर्णों से अधिक नहीं होने के लिए प्रतिबंधित करता है"
RustyTheBoyRobot

2
खासकर यदि आप चाहते हैं कि ईमेल फ़ील्ड में एक अद्वितीय बाधा हो; INNODB के तहत और utf8 varchar (254) काफी छोटा है (767bytes से कम) के लिए एक अद्वितीय बाधा और varchar (300) नहीं है।
स्वायत्तता

में आरएफसी 3696 शुद्धिपत्र ID 1003 मैंने पाया यह कहा गया है कि 256 वर्ण व्यावहारिक सीमा (और 320 वर्ण अधिकतम)।
अर्नोल्ड स्क्रीवर

56

मेटाफ़िल्टर से पूछें :

मेरा डेटा 323 पतों के डेटाबेस से आता है। वितरण में कुछ ऊपरी-छोर आउटलेयर (सकारात्मक-तिरछी) हैं। यह आम तौर पर आउटलेर के बिना वितरित किया जाता है (मैंने इसे परीक्षण किया।)

न्यूनतम: १२ १ चतुर्थक: १ ९ मीन (w / आउटलेयर): २३.०४ मीन w / o आउटलेर): २२.art ९ ३ चतुर्थांश: २६ मैक्स (w / आउटलेयर): ४ Max मैक्स (w / o आउटसेलर): ३५

मेडियन: 23 मोड: 24 एसटीडी। देव (w / outliers): 5.20 एसटीडी। देव (w / o आउटलेर्स): 4.70

डेटा पर आधारित रेंजर्स जिसमें डेटा का 68.2% शामिल है 17.8 - 28.2 95.4% डेटा 12.6 - 33.4 99.7% डेटा 7.4 - 38.6

डेटा आउटलेर्स के आधार पर डेटा 68.1% डेटा को छोड़कर 18.1 - 27.5 95.4% डेटा 13.4 - 32.2 99.7% डेटा 8.7 - 36.9

यदि आप http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/ के लिए साइन अप करते हैं, तो आपका ईमेल पता निश्चित रूप से एक स्पष्ट होगा :)

यहां बताया गया है क्या एक ईमेल पते की अधिकतम सुरक्षित लंबाई एक वेबसाइट के रूप में अनुमति देने के लिए है? थोड़ा अलग माध्य के साथ रेकोन पर (N = 50,496, माध्य = 23):

ईमेल पता लंबाई वितरण


@ मासी वास्तव में क्या उत्सुक है कि यह एक सामान्य वितरण के बजाय एक पॉइसन वितरण है - किसी को भी विचार है कि ऐसा क्यों है? : पी
पेजमैन

@ पेजमैन: इसका कारण यह है कि प्रत्येक घटना बेतरतीब ढंग से वितरित की जाती है और प्रत्येक घटना को अनंत स्थान से लिया जाता है। - अगर आप लाल रंग की ड्राइविंग कारों की संख्या की गणना करते हैं तो आपको एक समान वितरण मिलता है जैसे कि आपके पास अक्षों में लाल होने के लिए कारों की संख्या बनाम समय है।
लेओ लेपोल्ड हर्ट्ज़ '

व्यक्तिगत रूप से मुझे बेनफोर्ड का नियम बेहतर लगता है: en.wikipedia.org/wiki/Benford%27s_law
किट्सन

2
मैंने वर्षों तक 120 चर वर्णों का उपयोग किया है। असली दुनिया का तर्क यह है कि भले ही कोई आपके 320 varchar फ़ील्ड को तैयार करने के लिए तैयार हो ... मुझे यकीन है कि उनके पास एक 40 char वैकल्पिक ईमेल है
Chukky Nze

18

बस उपयोग करें varchar(50)। हर बार लंबा ईमेल बकवास है।

बस देखो कब तक 50 चार्ट है:

peoplewithanemail @ ddressthislongjustuseashorterone

यदि आप 255 वर्ण ईमेल की अनुमति देते हैं:

  • उन्हें प्रदर्शित करना आपके यूआई को गड़बड़ कर सकता है (सबसे अच्छा वे काट दिया जाएगा, कम से कम वे आपके कंटेनरों और मार्जिन को धक्का देते हैं) और
  • दुर्भावनापूर्ण उपयोगकर्ता उन चीज़ों के साथ कर सकते हैं जिन्हें आप अनुमानित नहीं कर सकते हैं (जैसे कि उन मामलों में जहां हैकर्स ने डेटा का एक गुच्छा स्टोर करने के लिए एक मुफ्त ऑनलाइन एपीआई का उपयोग किया है)

(आंकड़े बताते हैं कि कोई भी वास्तव में एक वैध ईमेल पते के लिए लगभग 50 से अधिक चार्ट में प्रवेश नहीं करता है, उदाहरण के लिए देखें: पेजमैन का जवाब https://stackoverflow.com/a/1199245/87861 )


5
पूर्णतया सहमत। उनके दाहिने दिमाग में कौन किसी भी ईमेल पते पर होगा? निश्चित रूप से, यह सैद्धांतिक रूप से सही है कि एक ईमेल 320 वर्णों का हो सकता है लेकिन वास्तविक दुनिया में? अपने सिस्टम में मैं भी varchar (50) का उपयोग करता हूं और मुझे कभी भी यह शिकायत नहीं हुई कि कोई उपयोगकर्ता पंजीकरण नहीं कर सकता है।
नॉर्बर्ट नोबर्टनसन

2
यह विशाल डेटासेट से जानना दिलचस्प होगा कि औसत विश्व ईमेल की लंबाई क्या है और आउटलेयर क्या हैं और कितने बड़े हैं।
नॉर्बर्ट नोबर्टनसन

4
गलत। बहुत सारे वास्तविक दुनिया उपयोगकर्ता हैं जिनके ईमेल में 50 से अधिक अक्षर हैं, और इससे भी महत्वपूर्ण बात यह है कि वे इसे सिर्फ आपके लिए नहीं बदल सकते हैं। उन्हें किसी ऐसी चीज के लिए उपयोग करने से मना करना जिसे वे ठीक नहीं कर सकते, अनुचित है।
मार्कस डाउनिंग

2
वे निश्चित रूप से नए ईमेल बना सकते हैं। गूगल बनाओ।
निकोलस मांजिनी

इसके अलावा, प्लस अंकन के बारे में मत भूलना। कुछ बिजली उपयोगकर्ता इसका उपयोग अपने ईमेल को अलग करने और व्यवस्थित करने के लिए कर रहे हैं। अनिवार्य रूप से, उनके पास प्रत्येक वेबसाइट / सेवा / ऐप के अनुसार एक अद्वितीय (उप) ईमेल होगा। उदाहरण के लिए, आइए कल्पना करें कि मेरा सामान्य ईमेल मेरा पहला नाम है और किसी कंपनी के नाम पर अंतिम नाम है: firstnameandlastone@superacmecompany.com। यह पहले से ही ~ 40 अक्षर है। अब, यदि मैंने स्टैकओवरफ़्लो खाते के लिए एक प्लस नोटेशन का उपयोग किया है: firstnameandlastone+stackoverflow@superacmecompany.com -that के ~ 55 अक्षर। कुछ प्लस नोटेशन लंबे समय तक हो सकते हैं, जैसे, + स्टैकओवरफ़्लो-पर्सनल और * -वर्क।
वाटरलिंक

16

मेरा कार्य ईमेल पता 20 से अधिक वर्णों का है!

उपयुक्त RFC विनिर्देश पढ़ें :

"ई-मेल पते का स्थानीय-भाग 64 वर्णों तक लंबा हो सकता है और डोमेन नाम में अधिकतम 255 वर्ण हो सकते हैं"


4

डेटाबेस में चर वर्ण प्रकार अनावश्यक स्थान पर कब्जा नहीं करते हैं। इस प्रकार, जहां तक ​​संभव हो ऐसे क्षेत्रों को विवश करने का कोई कारण नहीं है। किसी व्यक्ति के नाम, उनके संगठन और उनके डोमेन नाम द्वारा उपयोग की जाने वाली नामकरण योजना के आधार पर, एक पता आसानी से 20 वर्णों को पार कर सकता है।

RFC-2822 में स्थानीय-भाग और डोमेन-नाम की लंबाई की कोई सीमा नहीं है । RFC-2181 डोमेन नाम को 255 ऑक्टेट / वर्णों तक सीमित करता है।

फिर से, चूंकि एक varchar केवल आपके द्वारा स्टोर किए गए स्ट्रिंग द्वारा वास्तव में उपयोग किए जाने वाले स्थान का उपयोग करता है, इसलिए ईमेल पते की लंबाई के लिए एक छोटी सीमा होने का कोई कारण नहीं है। बस 512 के साथ जाओ और चिंता करना बंद करो। बाकी सब कुछ समयपूर्व अनुकूलन है


3

प्रारंभ में अधिकतम 320 वर्ण (64 + 1 + 255, जैसा कि अन्य उत्तरों में दिखाया गया है) है, लेकिन RFC 3696 इरेटा 33 के रूप में :

हालाँकि, MAIL और RCPT में 256 वर्णों के आदेशों में एक पते की लंबाई पर RFC 2821 पर प्रतिबंध है। चूँकि उन क्षेत्रों में फिट नहीं होने वाले पते सामान्य रूप से उपयोगी नहीं होते हैं, इसलिए पते की लंबाई की ऊपरी सीमा को सामान्य रूप से 256 माना जाना चाहिए।

और RFC 5321 सेक्शन 4.5.3.1.3 से :

4.5.3.1.3। पथ

रिवर्स-पथ या फ़ॉरवर्ड-पथ की अधिकतम कुल लंबाई 256 ओकटेट (विराम चिह्न और तत्व विभाजक सहित) है

यह उद्घाटन और समापन कोष्ठक सहित है, इसलिए यह हमें ईमेल पते के केवल 254 ओकटेट्स तक ले जाने देता है ।

लेकिन ध्यान रखें कि ओकटेट्स की संख्या वर्णों की संख्या के बराबर नहीं हो सकती है (एक चार्ट में 2 या अधिक ओकटेट्स हो सकते हैं)। इसके अलावा RFC खंड 4.5.3.1 बताता है कि अधिक के क्षेत्र हो सकते हैं जो कि अधिकतम है और यह संभव है लेकिन सर्वर को सही ढंग से पकड़ने के लिए गारंटी नहीं है।

और फिर आप VARCHAR(254)ईमेल पते को स्टोर करने के लिए एक का उपयोग / कर सकते हैं ।

नोट: MySQL में कम से कम, VARCHAR255 ओकटेट्स से कम या बराबर सफेद के रूप में घोषित एक कॉलम सभी को संग्रहीत किया जाएगा 1 byte + length(1 लंबाई को स्टोर करने के लिए है) इसलिए निचली सीमा का उपयोग करने पर कोई स्थान प्राप्त नहीं होता है।


आप यह समझाने में विफल हैं कि आप 256 बाइट से 254 तक कैसे जाते हैं। मुझे पता है कि यह उद्घाटन / समापन कोष्ठक का परिणाम है, लेकिन आपको इसे उत्तर के भाग के रूप में समझाना चाहिए।
गिल्ली

2

जैसा कि दूसरों ने कहा है, 20. 256 + 64 से बड़ा तरीका मुझे अच्छा लगता है, और आरएफसी का अनुपालन है।

आपके डेटाबेस के लिए इतना बड़ा मूल्य नहीं होने का एकमात्र कारण यदि आप प्रदर्शन या स्थान के बारे में चिंता कर रहे हैं, और यदि आप ऐसा कर रहे हैं, तो मैं 99.999999999999% सुनिश्चित करता हूं कि यह समय से पहले का अनुकूलन है

बड़े बनो।


VARCHAR ने केवल आवश्यक वर्णों की संख्या (प्लस लंबाई) संग्रहीत की। केवल मुद्दा मैं देख रहा हूं कि क्या आप 8000 बाइट प्रति पंक्ति सीमा में जगह के लिए लड़ रहे हैं।
रिचर्ड साज़ेले

मैं अंतरिक्ष के लिए नहीं लड़ रहा हूं। मैं सुरक्षा और प्रयोज्य के बीच संतुलन के लिए लड़ रहा हूं।
लेओ लेपोल्ड हर्ट्ज़ o

2

एक CHAR (20) फ़ील्ड में हमेशा 20 वर्ण होंगे, चाहे आप इसका उपयोग करें या नहीं। (अक्सर अंत में रिक्त स्थान के साथ गद्देदार।) एक VARCHAR (20) फ़ील्ड में अधिकतम 20 वर्ण होंगे, लेकिन इसमें कम समय लग सकता है। CHAR () की निरंतर चौड़ाई का एक लाभ एक तालिका में एक पंक्ति में तेजी से कूदना है, क्योंकि आप केवल उस सूचकांक की गणना कर सकते हैं जो उस पर होना चाहिए। दोष अंतरिक्ष को बर्बाद कर रहा है।

यदि आपके टेबल में कोई VARCHAR (x) कॉलम है तो निरंतर आकार CHAR (x) का लाभ खो जाता है। मुझे याद है कि MySQL ने चुपचाप किसी भी CHAR () फ़ील्ड्स को VARCHAR () में पर्दे के पीछे बदल दिया यदि कुछ कॉलम VARCHAR () थे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.