উত্তর:
DOMAIN
এসআমি মনে করি না citext
(কেস-সংবেদনশীল) ব্যবহার করা যথেষ্ট [1] । পোস্টগ্রি ব্যবহার আমরা করতে পারেন একটি কাস্টম ডোমেইন তৈরি যা মূলত একটি ওভার কিছু সংজ্ঞায়িত সীমাবদ্ধতার হয় টাইপ । আমরা উদাহরণস্বরূপ citext
টাইপ বা তারও বেশি একটি ডোমেন তৈরি করতে পারি text
।
type=email
স্পেক ব্যবহার করেকোনও ই-মেইল ঠিকানা কী তা নিয়ে প্রশ্নের সর্বাধিক সঠিক উত্তর আরএফসি5322 -এ নির্দিষ্ট করা হয়েছে । এই অনুমানটি অত্যন্ত জটিল [2] , এতটাই যে সমস্ত কিছু এটি ভেঙে দেয়। এইচটিএমএল 5-এ ইমেলের জন্য আলাদা আলাদা বৈশিষ্ট রয়েছে ,
এই প্রয়োজনীয়তাটি আরএফসি 5322 এর ইচ্ছাকৃত লঙ্ঘন যা ইমেল ঠিকানাগুলির জন্য একটি সিনট্যাক্স সংজ্ঞায়িত করে যা একই সাথে খুব কড়া ("@" চরিত্রের আগে), খুব অস্পষ্ট ("@" চরিত্রের পরে), এবং খুব শিথিল (মন্তব্যের অনুমতি দেয়) , বেশিরভাগ শ্বেত স্পেসের অক্ষর এবং বেশিরভাগ ব্যবহারকারীর কাছে অপরিচিত শিষ্টাচারে উদ্ধৃত স্ট্রিংগুলি এখানে ব্যবহারিক ব্যবহারের হতে পারে। [...] নিম্নলিখিত জাভাস্ক্রিপ্ট- এবং পার্ল-সামঞ্জস্যপূর্ণ নিয়মিত প্রকাশটি উপরের সংজ্ঞাটির একটি বাস্তবায়ন।
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
এটি সম্ভবত আপনি যা চান এটি সম্ভবত এটি এবং HTML5 এর পক্ষে এটি যথেষ্ট ভাল তবে এটি সম্ভবত আপনার পক্ষে যথেষ্ট ভাল। আমরা পোস্টগ্র্রেএসকিউএলে সরাসরি এটি ব্যবহার করতে পারি। আমি এখানেও ব্যবহার করি citext
(যার প্রযুক্তিগত অর্থ আপনি কেবলমাত্র উপরের-কেস বা লোয়ার-কেসটিকে সরিয়ে দিয়ে কিছুটা দৃষ্টিকটুভাবে রেজেক্স করতে পারেন)।
CREATE EXTENSION citext;
CREATE DOMAIN email AS citext
CHECK ( value ~ '^[a-zA-Z0-9.!#$%&''*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$' );
এখন আপনি করতে পারেন ...
SELECT 'asdf@foobar.com'::email;
কিন্তু না
SELECT 'asdf@foob,,ar.com'::email;
SELECT 'asd@f@foobar.com'::email;
কারণ যারা দুজনেই ফিরে আসে
ERROR: value for domain email violates check constraint "email_check"
কারণ এটিও মূল প্রতিবেদনের উপর ভিত্তি করে
SELECT 'asdf@foobar.com'::email = 'ASdf@fooBAR.com';
ডিফল্ট হিসাবে সত্য ফিরে।
plperlu
/Email::Valid
একটি গুরুত্বপূর্ণ নোট হিসাবে, এটি করার আরও একটি সঠিক পদ্ধতি রয়েছে যা ব্যবহার করা আরও জটিল plperlu
। আপনার যদি এই স্তরের নির্ভুলতার প্রয়োজন হয় তবে আপনি চান নাcitext
। Email::Valid
এমনকি ডোমেনটির একটি এমএক্স রেকর্ড রয়েছে কিনা তা পরীক্ষা করতে পারে (ইমেলের ডক্সে উদাহরণ: :: বৈধ) প্রথমে প্লেপারলু যুক্ত করুন (সুপারিউজার প্রয়োজন)।
CREATE EXTENSION plperlu;
তারপরে ফাংশনটি তৈরি করুন , লক্ষ্য করুন আমরা একটি হিসাবে চিহ্নিত করেছি IMMUTABLE
:
CREATE FUNCTION valid_email(text)
RETURNS boolean
LANGUAGE plperlu
IMMUTABLE LEAKPROOF STRICT AS
$$
use Email::Valid;
my $email = shift;
Email::Valid->address($email) or die "Invalid email address: $email\n";
return 'true';
$$;
তারপরে ডোমেনটি তৈরি করুন ,
CREATE DOMAIN validemail AS text NOT NULL
CONSTRAINT validemail_check CHECK (valid_email(VALUE));
citext
প্রযুক্তিগতভাবে ব্যবহার ভুল। এসএমটিপি local-part
সংবেদনশীল হিসাবে সংজ্ঞায়িত করেছে । কিন্তু, আবার, এটি অনুমানের বোকা হওয়ার ঘটনা। এটির নিজস্ব পরিচয় সংকট রয়েছে। অনুমানে বলা হয়েছে local-part
( @
"এর আগে অংশ )" মেয়ের সংবেদনশীল হতে হবে "..." কেস সংবেদনশীল হিসাবে বিবেচনা করা উচিত "... এবং এখনও" মেলবাক্সের স্থানীয় অংশগুলির কেস সংবেদনশীলতা শোষণ আন্তঃব্যবযোগিতা বাধাগ্রস্থ করে এবং নিরুৎসাহিত করা হয়। "এই রেজেক্সগুলির কোনওটিই সামগ্রিক ইমেল ঠিকানা বা স্থানীয় অংশ বা ডোমেন নামগুলিতে দৈর্ঘ্যের সীমা প্রয়োগ করে না। আরএফসি 5322 কোনও দৈর্ঘ্যের সীমাবদ্ধতা নির্দিষ্ট করে না। এসএমটিপি প্রোটোকলের মতো প্রকৃত ইমেল প্রেরণের জন্য অন্যান্য প্রোটোকলগুলিতে সীমাবদ্ধতা থেকে এই পদক্ষেপগুলি। আরএফসি 1035 সূচিত করে যে ডোমেনগুলি characters৩ টি অক্ষর বা তার চেয়ে কম হওয়া উচিত তবে এটির বাক্য গঠন বিশিষ্টতায় এটি অন্তর্ভুক্ত করে না। কারণটি হ'ল সত্যিকারের নিয়মিত ভাষা একই সাথে একটি দৈর্ঘ্যের সীমা প্রয়োগ করতে পারে না এবং একটানা হাইফেনগুলি অস্বীকার করতে পারে না।
a-z
এবং A-Z
চরিত্রের ক্লাসে থাকার কোনও কারণ আছে ?
~
ক্ষেত্রে সংবেদনশীল আপনার হয় হয় (ক) ~*
কেস সংবেদনশীল ব্যবহার করতে হবে বা (খ) চার-ক্লাসের উপরের এবং নিম্নের অক্ষরগুলি রাখতে হবে।
citext
এর ~
, কেস-অবশ আমাকে মনে করা হয় যে কেন আমি জিজ্ঞেস করছি।
আমি সর্বদা CITEXT
ইমেলের জন্য ব্যবহার করি , কারণ একটি ইমেল ঠিকানা (অনুশীলনে) ক্ষেত্রে সংবেদনশীল না হয় , যেমন জন@Example.com john@example.com এর মতো।
পাঠ্যের তুলনায় সদৃশ প্রতিরোধের জন্য একটি অনন্য সূচক সেটআপ করা আরও সহজ:
-- citext
CREATE TABLE address (
id serial primary key,
email citext UNIQUE,
other_stuff json
);
-- text
CREATE TABLE address (
id serial primary key,
email text,
other_stuff json
);
CREATE UNIQUE INDEX ON address ((lower(email)));
ইমেলের তুলনা করাও সহজ এবং ত্রুটিগুলির প্রবণতা কম:
SELECT * FROM address WHERE email = 'JOHN@example.com';
তুলনামুলকভাবে:
SELECT * FROM address WHERE lower(email) = lower('JOHN@example.com');
CITEXT
"সিটেক্সট" নামে একটি স্ট্যান্ডার্ড এক্সটেনশন মডিউলে সংজ্ঞায়িত এমন একটি টাইপ এবং টাইপ করে উপলভ্য:
CREATE EXTENSION citext;
পিএস text
এবং varchar
পোস্টগ্রিসে কার্যত একই এবং text
এক হিসাবে প্রত্যাশিত হিসাবে ব্যবহারের জন্য কোনও জরিমানা নেই । এই উত্তরটি দেখুন: পাঠ্য এবং বারচর মধ্যে পার্থক্য
আমি সর্বদা varchar(254)
একটি ইমেল ঠিকানা হিসাবে ব্যবহার করি 254 টি অক্ষরের চেয়ে দীর্ঘ না হতে পারে।
Https://stackoverflow.com/questions/386294/ কি- is- the- maximum- leth- of- a- uthor- email- address দেখুন
ইমেল ঠিকানাগুলির জন্য পোস্টগ্র্যাসকিএল-তে কোনও বিল্ট-ইন টাইপ নেই, যদিও আমি কিছু অবদানযুক্ত ডেটা প্রকারটি পেয়েছি।
এছাড়াও, আপনি যদি কোনও অনন্য কী যুক্ত করতে চান তবে ইমেল ঠিকানাগুলিকে মানিক করার জন্য আপনি ট্রিগার বা এ জাতীয় কিছু যুক্তি যুক্ত করতে চাইতে পারেন।
বিশেষত, domain
ইমেল ঠিকানার অংশটি (যা ফর্ম local-part
@ এর আকারটি domain
সংবেদনশীল এবং এটি কেস সংবেদনশীল local-part
হিসাবে বিবেচনা করা উচিত http:// http://tools.ietf.org/html/rfc5321#section-2.4 দেখুন
আরেকটি বিবেচনা হ'ল আপনি যদি ফর্মটিতে নাম এবং ইমেল ঠিকানা সঞ্চয় করতে চান তবে এই "Joe Bloggs" <joe.bloggs@hotmail.com>
ক্ষেত্রে আপনার 254 টির চেয়ে বেশি অক্ষরের চেয়ে বেশি স্ট্রিং দরকার এবং আপনি অর্থপূর্ণভাবে একটি অনন্য বাধা ব্যবহার করতে সক্ষম হবেন না। আমি এটি করব না এবং নাম এবং ইমেল ঠিকানা আলাদাভাবে সঞ্চয় করার পরামর্শ দেব। এই বিন্যাসে সুন্দর মুদ্রণ ঠিকানাগুলি আপনার উপস্থাপনা স্তরে সর্বদা সম্ভব।
@
) = 320 Perhaps সম্ভবত আমি এটির ভুল ব্যাখ্যা দিচ্ছি।
আপনি একটি চেক কনট্রান্সট ব্যবহার করতে আগ্রহী হতে পারেন (সম্ভবত সহজ, তবে আপনি যা চান তার চেয়ে বেশি প্রত্যাখ্যান করতে পারেন, বা আপনি এখানে এবং এখানে আলোচিত একটি ফাংশন ব্যবহার করেন । মূলত, এটি নির্দিষ্টকরণ এবং বাস্তবায়নের স্বাচ্ছন্দ্যের মধ্যে ট্রেডঅফস সম্পর্কেই আকর্ষণীয় বিষয় topic যদিও। পোস্টগ্রি এমনকি একটি নেটিভ IP ঠিকানা টাইপ করুন আছে, কিন্তু একটি ইমেল ডাটা টাইপ জন্য pgfoundry উপর একটি প্রকল্প আছে এখানে । যাইহোক, শ্রেষ্ঠ আমি এই সম্পর্কে পাওয়া একটি ইমেল ডোমেইন। ডোমেন একটি চেক সীমাবদ্ধতার চেয়ে ভাল কারণ আপনি যদি এটি পরিবর্তন করেন তবে আপনাকে কেবল এটি ডোমেন সংজ্ঞায় একবার করতে হবে এবং আপনার সমস্ত চেকের সীমাবদ্ধতাগুলি পরিবর্তন করে পিতা-সন্তানের টেবিলগুলি অনুসরণ করে অনুসরণ করতে হবে না। ডোমেনগুলি সত্যিই দুর্দান্ত - ডেটা টাইপের মতো কিন্ডা, তবে প্রয়োগ করা সহজ। আমি সেগুলি ফায়ারবার্ডে ব্যবহার করেছি - ওরাকল এমনকি তাদেরও নেই!