Правильно различать адреса электронной почты UTF-8 в MySQL

Что такое правильная сортировка MySQL для хранения адресов электронной почты?

Я понимаю, что адреса электронной почты могут быть UTF-8.

Однако, если я хочу сравнить входящее электронное письмо с электронным письмом в базе данных, как мне это сделать?

Эти адреса электронной почты всегда принадлежат одному и тому же почтовому ящику?

email@schloß.de = email@schloss.de
schloß@test.de = schloss@test.de

Если это так, то utf8_general_ci будет правильным выбором, но если это не так, какое сопоставление я должен использовать?

Если я отправлю электронное письмо по адресу schloß@test.de и schloss@test.de, есть ли 100% гарантия, что он попадет в тот же почтовый ящик? То же самое с test@schloss.de и test@schloß.de.

Потому что в utf8_general_ci ß = ss.

Я вижу, что schloß = schloss в описании RFN IDN, но как насчет левой части адресов электронной почты? Как насчет таких вещей, как символы нулевой ширины, которые не разрешены в IDN, но существуют в UTF 8? Они также игнорируются в сопоставлениях MySQL UTF-8?

Кроме того, мне нужно сопоставление без учета регистра.

В настоящее время я преобразовываю электронную почту в нижний регистр и храню ее в отдельном столбце, email_bin с сортировкой utf8_bin, а затем просто сопоставляю ее с email_bin_lower=LOWER(user_input_email), но это единственный способ? Возможно, использование utf8_general_ci или utf8_unicode_ci и удаление ненужного столбца будет более разумным выбором?

Я просто хочу убедиться, что могу точно определить, какие адреса электронной почты, безусловно, одинаковы, а какие, безусловно, разные. Чтобы я не разрешил регистрацию новых пользователей по электронной почте, которая уже зарегистрирована, и, с другой стороны, для другой таблицы, где у меня есть неуникальные электронные письма, я хочу выяснить, какие электронные письма, безусловно, совпадают.

0 ответов

Другие вопросы по тегам