O wiele za późno na ten post, ale mam coś nieco innego do powiedzenia ...
>> "Are email addresses case sensitive?"
Cóż, „To zależy ...” (TM)
Niektóre organizacje uważają, że to dobry pomysł, a ich serwery pocztowe wymuszają rozróżnianie wielkości liter.
W przypadku tych zwariowanych miejsc: „Tak, w wiadomościach e-mail rozróżniana jest wielkość liter”.
Uwaga: fakt, że specyfikacja mówi, że możesz coś zrobić, nie oznacza, że warto to zrobić.
Zasada KISS sugeruje, że nasze systemy używają wiadomości e-mail bez rozróżniania wielkości liter.
Natomiast zasada solidności sugeruje, że akceptujemy wiadomości e-mail uwzględniające wielkość liter.
Rozwiązanie:
- Przechowuj wiadomości e-mail z rozróżnianiem wielkości liter
- Wysyłaj wiadomości e-mail z rozróżnianiem wielkości liter
- Wykonuj wyszukiwania wewnętrzne bez rozróżniania wielkości liter
Oznaczałoby to, że jeśli ten adres e-mail już istnieje: użytkownik@x.com
... i pojawia się inny użytkownik, który chce użyć tego e-maila: USER@x.com
... że nasza logika wyszukiwania bez rozróżniania wielkości liter zwróciłaby komunikat o błędzie „Ten e-mail już istnieje”.
Teraz musisz podjąć decyzję: czy to rozwiązanie jest odpowiednie w twoim przypadku?
Jeśli nie, możesz naliczyć opłatę za obsługę dla tych klientów, którzy wymagają wsparcia dla wiadomości e-mail uwzględniających wielkość liter i wdrożyć niestandardową logikę, która pozwala USER@x.com w twoim systemie, nawet jeśli użytkownik@x.com już istnieje.
W takim przypadku logika wyszukiwania / sprawdzania poprawności wiadomości e-mail może wyglądać podobnie do tego pseudokodu:
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 + '"
}
W ten sposób wymuszasz niewrażliwość na wielkość liter, ale pozwalasz klientom płacić za to wsparcie, jeśli korzystają z systemów e-mail obsługujących takie bzdury.
ps ILIKE jest słowem kluczowym PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html