Berikut adalah bagian dari kueri saya, yang mencerminkan EMAIL_ADDRESS
tipe data kolom dan properti:
EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL,
Namun, John Saunders menggunakan VARYING(256)
.
Ini menunjukkan kepada saya bahwa saya belum memahami VARYING dengan benar.
Saya memahaminya sehingga panjang alamat email adalah 20 karakter dalam kasus saya, sedangkan 256 untuk Jodn.
Konteks dalam kode John
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)
);
Saya belum pernah melihat alamat email lebih dari 20 karakter, digunakan oleh orang biasa.
Berapa panjang optimal untuk alamat email dalam database?
database
performance
email
database-design
Léo Léopold Hertz 준영
sumber
sumber
Jawaban:
Panjang maksimum alamat email adalah 254 karakter.
Setiap alamat email terdiri dari dua bagian. Bagian lokal yang muncul sebelum tanda '@', dan bagian domain yang mengikutinya. Di "[email protected]", bagian lokalnya adalah "pengguna", dan bagian domainnya adalah "example.com".
Bagian lokal tidak boleh melebihi 64 karakter dan bagian domain tidak boleh lebih dari 255 karakter.
Panjang gabungan bagian domain + @ + lokal dari sebuah alamat email tidak boleh lebih dari 254 karakter. Seperti yang dijelaskan dalam RFC3696 Errata ID 1690 .
Saya mendapatkan bagian asli dari informasi ini dari sini
sumber
dari Ask Metafilter :
Jika Anda mendaftar untuk http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/ maka alamat email Anda pasti akan menjadi outlier :)
Berikut Berapa panjang aman maksimum dari sebuah alamat email yang diperbolehkan dalam formulir situs web? pada Raycon dengan mean yang sedikit berbeda (N = 50,496, mean = 23):
sumber
Gunakan saja
varchar(50)
. Email yang lebih panjang adalah omong kosong, setiap saat.Lihat saja berapa panjang 50 karakter itu:
peoplewithanemail @ ddressthislongjustuseashorterone
Jika Anda mengizinkan 255 karakter email:
(Statistik menunjukkan bahwa tidak ada yang benar-benar memasukkan lebih dari sekitar 50 karakter untuk alamat email yang sah, lihat misalnya: jawaban pageman https://stackoverflow.com/a/1199245/87861 )
sumber
Alamat email kantor saya lebih dari 20 karakter!
Baca spesifikasi RFC yang sesuai :
sumber
Jenis karakter variabel dalam database tidak menempati ruang yang tidak dibutuhkan. Jadi, tidak ada alasan untuk membatasi bidang seperti itu sebanyak mungkin. Bergantung pada nama seseorang, skema penamaan yang digunakan oleh organisasi mereka dan nama domain mereka, sebuah alamat dapat dengan mudah melebihi 20 karakter.
Tidak ada batasan untuk panjang bagian-lokal dan nama-domain di RFC-2822 . RFC-2181 membatasi nama domain hingga 255 oktet / karakter.
Sekali lagi, karena varchar hanya menggunakan ruang yang sebenarnya digunakan oleh string yang Anda simpan, tidak ada alasan untuk memiliki batas kecil untuk panjang alamat email. Gunakan saja 512 dan berhentilah khawatir. Yang lainnya adalah pengoptimalan prematur
sumber
Awalnya maksimum adalah 320 karakter (64 + 1 + 255, seperti yang ditunjukkan di jawaban lain) tetapi seperti yang dikatakan RFC 3696 Errata 1003 :
Dan dari RFC 5321 bagian 4.5.3.1.3 :
Ini termasuk tanda kurung buka dan tutup jadi biarlah kita hanya 254 oktet dari alamat email.
Tetapi perlu diingat bahwa jumlah oktet mungkin tidak sama dengan jumlah karakter (karakter dapat memiliki 2 oktet atau lebih). Juga bagian RFC 4.5.3.1 mengatakan bahwa mungkin ada bidang lebih dari yang maksimum dan ini mungkin tetapi tidak dijamin server untuk menangkapnya dengan benar.
Dan kemudian Anda dapat / harus menggunakan a
VARCHAR(254)
untuk menyimpan alamat email.Catatan: Setidaknya di MySQL, kolom yang dideklarasikan
VARCHAR
sedikit kurang atau sama dengan 255 oktet akan disimpan sebagai1 byte + length
(1 untuk menyimpan panjang) sehingga tidak ada ruang yang diperoleh jika menggunakan batas bawah.sumber
Seperti yang dikatakan orang lain, jauh lebih besar dari 20. 256 + 64 terdengar bagus bagi saya, dan sesuai dengan RFC.
Satu-satunya alasan untuk tidak memiliki nilai yang besar untuk database Anda adalah jika Anda mengkhawatirkan kinerja atau ruang, dan jika Anda melakukannya maka saya 99.99999999999999% yakin itu adalah pengoptimalan prematur .
Besarkan.
sumber
Bidang CHAR (20) akan selalu mengambil 20 karakter, baik Anda menggunakan semuanya atau tidak. (Sering kali diisi dengan spasi di bagian akhir.) Bidang VARCHAR (20) akan memakan waktu hingga 20 karakter, tetapi mungkin kurang dari itu. Salah satu keuntungan dari lebar konstan CHAR () adalah lompat cepat ke baris dalam tabel, karena Anda bisa menghitung indeks tempatnya berada. Kekurangannya adalah membuang-buang ruang.
Manfaat CHAR (x) berukuran konstan akan hilang jika Anda memiliki kolom VARCHAR (x) di tabel Anda. Sepertinya saya ingat bahwa MySQL diam-diam mengubah kolom CHAR () menjadi VARCHAR () di belakang layar jika beberapa kolom adalah VARCHAR ().
sumber