Saya selalu menggunakan VARCHAR(320)
. Inilah sebabnya. Standar menentukan batasan berikut:
- 64 karakter untuk "bagian lokal" (nama pengguna).
- 1 karakter untuk
@
simbol.
- 255 karakter untuk nama domain.
Sekarang, beberapa orang akan mengatakan Anda perlu mendukung lebih dari itu. Beberapa orang juga akan mengatakan bahwa Anda perlu mendukung Unicode untuk nama domain (artinya Anda harus beralih ke NVARCHAR
). Sementara standar dapat berubah sementara itu (sudah lama sejak saya sudah skin di permainan), saya cukup yakin bahwa saat ini sebagian besar server di dunia tidak akan menerima alamat email Unicode, dan saya yakin banyak server akan mengalami masalah membuat dan / atau menerima alamat dengan> 320 karakter.
Yang mengatakan, Anda dapat mempersiapkan yang terburuk sekarang, jika Anda suka (dan jika Anda menggunakan Kompresi Data di SQL Server 2008 R2 atau lebih baik, Anda akan mendapat manfaat dari kompresi Unicode, yang berarti Anda hanya membayar penalti 2 byte untuk karakter yang benar-benar membutuhkan saya t). Dengan cara ini Anda dapat membuat kolom Anda selebar yang Anda inginkan, dan Anda dapat membiarkan orang-orang menjejalkan sampah terlalu lama di sana yang mereka inginkan - mereka tidak akan menerima email jika mereka memberi Anda sampah sama seperti mereka tidak mau menerima email jika sisipan gagal. Masalahnya adalah jika Anda membiarkan sampah yang tidak valid masuk, Andaharus menghadapinya. Dan berapa pun ukuran yang Anda buat - jika seseorang mencoba memasukkan 400 karakter ke dalam kolom 320 karakter, seseorang akan mencoba memasukkan 1025 karakter ke dalam kolom 1024 karakter. Tidak ada alasan orang yang berakal memiliki alamat email> 320 karakter kecuali mereka menggunakannya untuk secara eksplisit menguji batasan sistem.
Tapi berhentilah meminta pendapat tentang ini - dan berhentilah melihat implementasi lain untuk panduan (kebetulan dalam kasus ini yang Anda rujuk tidak repot-repot mengerjakan pekerjaan rumah mereka sendiri dan hanya mengambil nomor dari mereka, yah, Anda tahu) . Anda memiliki akses langsung ke standar - pastikan Anda berkonsultasi dengan versi terbaru, mendukungnya sebagai minimum, dan tetap di atas standar sehingga Anda dapat beradaptasi dengan perubahan spesifikasi.
EDIT terima kasih kepada @ypercube untuk ping di obrolan.
Sebagai tambahan, mungkin Anda tidak ingin membuang seluruh alamat ke dalam satu kolom di tempat pertama. Normalisasi mungkin menunjukkan bahwa Anda tidak ingin menyimpan @hotmail.com
15 juta kali ketika int FK jauh lebih kurus akan bekerja dengan baik dan tidak memiliki overhead tambahan dari kolom panjang variabel. Anda juga bisa menormalkan nama pengguna, john.smith@hotmail.com
dan john.smith@gmail.com
membagikan nama pengguna yang sama - mereka tidak saling kenal tetapi database Anda tidak peduli tentang itu.
Saya membicarakan beberapa hal di sini:
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efisienly-in-sql-server/
http://www.mssqltips.com/sqlservertip/2671/storing-email-addresses-more-efisienly-in-sql-server--part-2/
Namun hal ini menimbulkan tantangan hingga batas 254 karakter di atas, karena tampaknya tidak ada konsensus tentang apa yang terjadi ketika domain 255 karakter yang valid digabungkan dengan bagian lokal 1 karakter yang valid. Ini harus diterima oleh sebagian besar server di seluruh dunia tetapi tampaknya melanggar batas 254 karakter ini. Jadi, apakah Anda membuat Domains
tabel yang memiliki batasan panjang artifisial lebih rendah untuk alamat e-mail, ketika domain dapat digunakan kembali sebagai URL 255 karakter yang valid?