Сколько времени SQL должен послать поля по электронной почте быть? [дубликат]

Рассмотрение комментариев в этом ответе ( Плавающая точка к Двоичному значению (C++) ) причина сделать это должно выполнить поразрядное сравнение двух значений.

#include 

int main()
{
    union Flip
    {
         float input;   // assumes sizeof(float) == sizeof(int)
         int   output;
    };

    Flip    data1;
    Flip    data2;
    Flip    data3;

    data1.input = 2.25125;
    data2.input = 2.25126;
    data3.input = 2.25125;

    bool    test12  = data1.output ^ data2.output;
    bool    test13  = data1.output ^ data3.output;
    bool    test23  = data2.output ^ data3.output;

    std::cout << "T1(" << test12 << ") T2(" << test13 << ") T3(" << test23 << ")\n";


}

87
задан GEOCHET 4 June 2012 в 01:27
поделиться

7 ответов

Теоретический предел действительно велик, но действительно ли вам нужно беспокоиться об этих длинных адресах электронной почты? Если кто-то не может войти в систему с помощью электронной почты из 100 символов, вас это действительно волнует? На самом деле мы предпочитаем, чтобы они этого не делали.

Некоторые статистические данные могут пролить свет на проблему. Мы проанализировали базу данных с более чем 10 миллионами адресов электронной почты. Эти адреса не подтверждены, поэтому есть недействительные. Вот несколько интересных фактов,

  1. Самый длинный действительный - 89.
  2. Есть сотни более длинных, вплоть до предела нашей колонки (255), но они, очевидно, поддельные при визуальном осмотре.
  3. Пик Распределение длины - 19.
  4. Длинного хвоста нет. Все резко падает после 38.

Мы почистили БД, выбросив все, что длиннее 40.

160
ответ дан 24 November 2019 в 07:45
поделиться

Раньше я использовал 255, потому что это укоренившийся стандарт короткого, но не слишком короткого ввода. Это, а я - человек привычки.

Однако, поскольку максимальное значение равно 319, я бы сделал nvarchar (320) в столбце. Следует помнить, что @ !

nvarchar не будет использовать пространство, которое вам не нужно, поэтому, если у вас только 20-значный адрес электронной почты, он займет всего 20 байт. Это контрастирует с nchar , который всегда будет занимать максимум (он дополняет значение пробелами справа).

Я бы также использовал nvarchar вместо varchar , так как это Unicode. Учитывая непостоянство адресов электронной почты, это определенно правильный путь.

16
ответ дан 24 November 2019 в 07:45
поделиться

Следующий адрес электронной почты состоит всего из 94 символов:

i.have.a.really.long.name.like.seetharam.krishnapillai@AReallyLongCompanyNameOfSomeKind.com.au

  • Может ли организация действительно дать вам электронное письмо с таким длинным?
  • Если бы они были достаточно глупы, вы бы на самом деле использовали такой адрес электронной почты ?
  • Кто-нибудь? Конечно, нет. Слишком долго для ввода и слишком сложно для запоминания.

Даже 92-летний технофоб сообразил бы, как подписаться на красивый короткий адрес Gmail, и просто использовал бы его, а не вводил бы это на своей странице регистрации.

Место на диске, вероятно, не проблема, но есть как минимум две проблемы с разрешением полей ввода пользователя быть во много раз длиннее, чем они должны быть:

  • Их отображение может испортить ваш пользовательский интерфейс (в лучшем случае они будут отрезаны, в худшем случае они толкают ваши контейнеры и поля)
  • Злоумышленники могут делать с ними то, что вы можете '123456789.123456789.123456789@1234567890123456.com

    Если один из миллиона пользователей должен использовать свой другой адрес электронной почты, чтобы использовать мое приложение, пусть будет так.

    (Статистика показывает, что на самом деле никто не вводит более 40 символов для адрес электронной почты, см., например: Ответ ZZ Coder https://stackoverflow.com/a/1297352/87861 )

9
ответ дан 24 November 2019 в 07:45
поделиться

Если вы действительно задумываетесь об этом, создайте имя пользователя varchar (60), домен varchar (255). Затем вы можете делать смешную статистику использования домена, что немного быстрее, чем делать это как единое поле. Если вы не уверены в оптимизации, это также позволит вашему SMTP-серверу отправлять электронные письма с меньшим количеством подключений / лучшей пакетной обработкой.

4
ответ дан 24 November 2019 в 07:45
поделиться

RFC 5321 (текущая спецификация SMTP, RFC2821 устарел) утверждает:

4.5.3.1.1. Local-part

Максимальная общая длина пользователя имя или другая локальная часть - 64
октеты.

4.5.3.1.2. Домен

Максимальная общая длина имя домена или номер составляет 255 октетов.

Это относится только к localpart @ domain , всего 320 символов ASCII (7-битных).

Если вы планируете нормализовать данные, возможно, разделив localpart и domain в отдельные поля, о дополнительных вещах, которые следует иметь в виду:

  • Метод, известный как VERP, может привести к созданию полноразмерных локальных частей для автоматически созданной почты (может не иметь отношения к вашему варианту использования)
  • домены нечувствительны к регистру; рекомендуется использовать нижний регистр доменной части
  • localparts чувствительны к регистру; user@domain.com и USER@domain.comтехнически разные адреса согласно спецификациям, хотя политика на domain.com может рассматривать эти два адреса как эквивалентные. Лучше всего ограничить сворачивание регистра localpart доменами, о которых известно, что это делает.
3
ответ дан 24 November 2019 в 07:45
поделиться

Для электронной почты, независимо от спецификации, я практически всегда использую 512 (nvarchar). Имена и фамилии похожи.

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

Обратите внимание, что, вероятно, не все почтовые клиенты поддерживают RFC, поэтому независимо от того, что он говорит, вы можете столкнуться с разными вещами в дикой природе.

0
ответ дан 24 November 2019 в 07:45
поделиться

я использую varchar(64) я не думаю, что кто-то может иметь более длинный email

1
ответ дан 24 November 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: