Đến cuối bài này, nhưng tôi có vài điều hơi khác để nói ...
>> "Are email addresses case sensitive?"
Chà, "Nó phụ thuộc ..." (TM)
Một số tổ chức thực sự nghĩ rằng đó là một ý tưởng tốt và máy chủ email của họ thực thi phân biệt chữ hoa chữ thường.
Vì vậy, đối với những nơi điên rồ đó, "Có, Email rất phân biệt chữ hoa chữ thường".
Lưu ý: Chỉ vì một đặc điểm kỹ thuật nói rằng bạn có thể làm điều gì đó không có nghĩa là đó là một ý tưởng tốt để làm như vậy.
Nguyên tắc của KISS cho thấy các hệ thống của chúng tôi sử dụng email không phân biệt chữ hoa chữ thường.
Trong khi đó, nguyên tắc Robustness cho thấy rằng chúng tôi chấp nhận các email nhạy cảm.
Giải pháp:
- Lưu trữ email với phân biệt chữ hoa chữ thường
- Gửi email với phân biệt chữ hoa chữ thường
- Thực hiện tìm kiếm nội bộ với trường hợp không nhạy cảm
Điều này có nghĩa là nếu email này đã tồn tại: user@x.com
... Và một người dùng khác xuất hiện và muốn sử dụng email này: USER@x.com
... Rằng logic tìm kiếm không nhạy cảm trong trường hợp của chúng tôi sẽ trả về thông báo lỗi "Email đó đã tồn tại".
Bây giờ, bạn có một quyết định để đưa ra: Giải pháp đó có đầy đủ trong trường hợp của bạn không?
Nếu không, bạn có thể tính phí tiện lợi cho những khách hàng cần hỗ trợ cho các email nhạy cảm với trường hợp của họ và triển khai logic tùy chỉnh cho phép USER@x.com vào hệ thống của bạn, ngay cả khi user@x.com đã tồn tại.
Trong trường hợp đó, logic tìm kiếm / xác thực email của bạn có thể trông giống như mã giả này:
if (user.paidEmailFee) {
// case sensitive email
query = "select * from users where email LIKE ' + user.email + '"
} else {
// case insensitive email
query = "select * from users where email ILIKE ' + user.email + '"
}
Bằng cách này, bạn chủ yếu thực thi sự vô cảm trong trường hợp nhưng cho phép khách hàng trả tiền cho hỗ trợ này nếu họ đang sử dụng các hệ thống email hỗ trợ vô nghĩa như vậy.
ps ILIKE là một từ khóa PostgreSQL: http://www.postgresql.org/docs/9.2/static/fifts-matching.html