Tôi đã luôn luôn sử dụng VARCHAR(320)
. Đây là lý do tại sao. Tiêu chuẩn ra lệnh cho những hạn chế sau:
- 64 ký tự cho "phần cục bộ" (tên người dùng).
- 1 ký tự cho
@
biểu tượng.
- 255 ký tự cho tên miền.
Bây giờ, một số người sẽ nói rằng bạn cần hỗ trợ nhiều hơn thế. Một số người cũng sẽ nói rằng bạn cần hỗ trợ Unicode cho tên miền (có nghĩa là bạn phải chuyển sang NVARCHAR
). Mặc dù tiêu chuẩn có thể thay đổi trong thời gian này (đã được một thời gian kể từ khi tôi có giao diện trong trò chơi), tôi khá tự tin rằng tại thời điểm này, hầu hết các máy chủ trên thế giới sẽ không chấp nhận địa chỉ email Unicode và tôi chắc chắn nhiều máy chủ sẽ gặp sự cố khi tạo và / hoặc chấp nhận địa chỉ có> 320 ký tự.
Điều đó nói rằng, bạn có thể chuẩn bị cho điều tồi tệ nhất bây giờ, nếu bạn thích (và nếu bạn đang sử dụng Nén dữ liệu trong SQL Server 2008 R2 hoặc tốt hơn, bạn sẽ được hưởng lợi từ nén Unicode, nghĩa là bạn chỉ phải trả tiền phạt 2 byte cho các ký tự thực sự cần nó). Bằng cách này, bạn có thể làm cho cột của mình rộng như bạn muốn và bạn có thể cho phép mọi người nhét bất kỳ thứ rác nào quá dài vào đó mà họ muốn - họ sẽ không nhận được e-mail nếu họ đưa cho bạn rác giống như họ sẽ không nhận e-mail nếu chèn thất bại. Vấn đề là nếu bạn để rác không hợp lệ, bạnphải đối phó với nó Và bất kể kích thước của bạn là bao nhiêu - nếu ai đó sẽ cố nhét 400 ký tự vào cột 320 ký tự, ai đó sẽ cố nhét 1025 ký tự vào cột 1024 ký tự. Không có lý do bất kỳ người nhạy cảm nào nên có địa chỉ email> 320 ký tự trừ khi họ đang sử dụng nó để kiểm tra ranh giới hệ thống một cách rõ ràng.
Nhưng hãy ngừng hỏi ý kiến về vấn đề này - và ngừng xem các triển khai khác để được hướng dẫn (điều này chỉ xảy ra trong trường hợp này mà những người bạn tham khảo đã không bận tâm làm bài tập về nhà của họ và chỉ chọn số trong số họ, bạn biết đấy) . Bạn có quyền truy cập trực tiếp vào tiêu chuẩn - đảm bảo bạn tham khảo phiên bản mới nhất, hỗ trợ ở mức tối thiểu và luôn ở trên tiêu chuẩn để bạn có thể thích ứng với các thay đổi trong thông số kỹ thuật.
EDIT cảm ơn @ypercube cho ping trong trò chuyện.
Ở một bên, có lẽ bạn không muốn đổ toàn bộ địa chỉ vào một cột ở vị trí đầu tiên. Bình thường hóa có thể gợi ý rằng bạn không muốn lưu trữ @hotmail.com
15 triệu lần khi một FK int nhiều da hơn sẽ hoạt động tốt và không có chi phí bổ sung của các cột có chiều dài thay đổi. Bạn cũng có thể bình thường hóa tên người dùng, john.smith@hotmail.com
và john.smith@gmail.com
chia sẻ tên người dùng chung - họ không biết nhau nhưng cơ sở dữ liệu của bạn không quan tâm đến điều đó.
Tôi đã nói về một số điều này ở đây:
http://www.mssqltips.com/sqlservertip/2657/storing-email-addresses-more- hiệu quả-in-sql-server /
http://www.mssqltips.com/sqlservertip/2671/storing-email-addresses-more-fficly-in-sql-server--part-2/
Tuy nhiên, điều này đưa ra những thách thức đối với giới hạn 254 ký tự ở trên, vì dường như không có sự đồng thuận về những gì xảy ra khi miền 255 ký tự hợp lệ được kết hợp với một cục bộ 1 ký tự hợp lệ. Điều này nên được chấp nhận bởi hầu hết các máy chủ trên toàn thế giới nhưng dường như vi phạm giới hạn 254 ký tự này. Vì vậy, bạn có tạo một Domains
bảng có giới hạn thấp hơn một cách giả tạo về độ dài cho các địa chỉ email, khi tên miền có thể được sử dụng lại làm URL 255 ký tự hợp lệ không?