2012-02-15 39 views
10

Đối với địa chỉ email, tôi nên cung cấp bao nhiêu khoảng trống cho các cột trong SQL Server.NVARCHAR (?) Cho địa chỉ email trong SQL Server

tôi thấy định nghĩa này trên Wikipedia:

http://en.wikipedia.org/wiki/Email_address

Định dạng của địa chỉ email là địa phương phần @ domain nơi địa phương phần có thể dài đến 64 ký tự và tên miền may có tối đa 253 ký tự - nhưng tối đa 256 ký tự chiều dài của đường dẫn tiến hoặc đảo ngược hạn chế toàn bộ địa chỉ email không được nhiều hơn 254 ký tự

Và một điều này:

http://askville.amazon.com/maximum-length-allowed-email-address/AnswerViewer.do?requestId=1166932

Vì vậy, bây giờ, tổng số ký tự cho phép đối với địa chỉ e-mail là 64 (địa phương phần) + 1 (hiệu "@") + 255 (miền part) = 320

Có thể trong tương lai, họ sẽ tăng giới hạn một phần địa phương lên 128 ký tự. sẽ tạo tổng số 384 ký tự.

Bạn nghĩ gì?

Trả lời

13

Tôi luôn sử dụng 320 dựa trên tính toán sau của bạn. Nó không chi phí bạn bất cứ điều gì để cho phép nhiều hơn *, trừ khi mọi người lạm dụng nó và thứ rác trong đó. Nó có thể chi phí bạn cho phép ít hơn, vì bạn sẽ có một người dùng bực bội nếu họ có địa chỉ email dài hơn hợp pháp và bây giờ bạn sẽ phải quay lại và cập nhật giản đồ, mã, tham số, v.v. để làm việc với (một nhà cung cấp dịch vụ e-mail), địa chỉ e-mail dài nhất mà tôi đã xem một cách tự nhiên là khoảng 120 ký tự - và rõ ràng họ chỉ đang tạo một địa chỉ email dài cho các nụ cười.

* Không đúng sự thật, kể từ khi dự toán bộ nhớ cấp được dựa trên giả định rằng thay đổi chiều rộng cột là một nửa dân cư thưa thớt, do đó, một cột rộng lưu trữ các dữ liệu tương tự có thể đã dẫn tới đặc tính hiệu suất rất khác nhau của các truy vấn nhất định .

Và tôi đã tranh luận xem NVARCHAR có cần thiết cho địa chỉ e-mail không. Tôi chưa đi qua một địa chỉ e-mail với các ký tự Unicode - Tôi biết tiêu chuẩn hỗ trợ họ, nhưng rất nhiều hệ thống hiện có không, nó sẽ được khá bực bội nếu đó là địa chỉ e-mail của bạn.

Và trong khi đúng là NVARCHAR chi phí gấp đôi không gian, với SQL Server 2008 R2 bạn có thể hưởng lợi từ nén Unicode, xử lý cơ bản tất cả các ký tự không phải Unicode trong cột NVARCHAR dưới dạng ASCII. Tất nhiên, nén chỉ khả dụng trong Enterprise + ...

Một cách khác để giảm yêu cầu về không gian là sử dụng bảng tra cứu trung tâm cho tất cả tên miền được quan sát và lưu trữ LocalPartDomainID với người dùng và lưu trữ từng tên miền duy nhất Một lần. Có điều này làm cho lập trình rườm rà hơn, nhưng nếu bạn có 80.000 địa chỉ hotmail.com, chi phí là 80,0000 x 4 byte thay vì 80.000 x 11 byte (hoặc ít hơn với nén).Nếu lưu trữ hoặc I/O là nút cổ chai của bạn, và không phải CPU, đây chắc chắn là một lựa chọn đáng để điều tra.

tôi đã viết về vấn đề này ở đây:

http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/

+1

@tugberk xin lỗi trong thông báo chậm trễ nhưng tôi đã viết về điều này tại đây: http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more-efficiently-in-sql-server/ –

+1

Chỉ dành cho thông tin: nhà cung cấp thành viên ASP.NET tạo cơ sở dữ liệu "AspNetUsers" bằng cách sử dụng "nvarchar (256)" cho trường Email. – Yanga

+0

@Yanga ugh, cảm ơn vì điều đó. –

0

Tôi đoán VARCHAR (320) sẽ là giới hạn bình thường đối với một tên miền ASCII-based và địa chỉ email. Nhưng chúng ta sẽ không bắt đầu thấy tên miền unicode xuất hiện đôi khi sớm?

http://en.wikipedia.org/wiki/Internationalized_domain_name

lẽ NVARCHAR (320) là những gì chúng ta nên bắt đầu sử dụng?

+1

Tôi thành thật tin rằng nó sẽ là một thời gian * dài * trước khi chúng ta bắt đầu thấy việc áp dụng rộng rãi các ký tự Unicode trong tên miền và địa chỉ e-mail. Số lượng các máy chủ e-mail một mình mà sẽ chỉ barf trên chúng đại diện cho một số động lực rất lớn chống lại nó ... –

+0

Bạn nói đúng. Nếu chúng ta quan tâm nhiều về độ dài, chúng ta nên làm tương tự cho unicode. – tugberk