Рассмотрение комментариев в этом ответе ( Плавающая точка к Двоичному значению (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";
}
Теоретический предел действительно велик, но действительно ли вам нужно беспокоиться об этих длинных адресах электронной почты? Если кто-то не может войти в систему с помощью электронной почты из 100 символов, вас это действительно волнует? На самом деле мы предпочитаем, чтобы они этого не делали.
Некоторые статистические данные могут пролить свет на проблему. Мы проанализировали базу данных с более чем 10 миллионами адресов электронной почты. Эти адреса не подтверждены, поэтому есть недействительные. Вот несколько интересных фактов,
Мы почистили БД, выбросив все, что длиннее 40.
Раньше я использовал 255, потому что это укоренившийся стандарт короткого, но не слишком короткого ввода. Это, а я - человек привычки.
Однако, поскольку максимальное значение равно 319, я бы сделал nvarchar (320)
в столбце. Следует помнить, что @
!
nvarchar
не будет использовать пространство, которое вам не нужно, поэтому, если у вас только 20-значный адрес электронной почты, он займет всего 20 байт. Это контрастирует с nchar
, который всегда будет занимать максимум (он дополняет значение пробелами справа).
Я бы также использовал nvarchar
вместо varchar
, так как это Unicode. Учитывая непостоянство адресов электронной почты, это определенно правильный путь.
Следующий адрес электронной почты состоит всего из 94 символов:
i.have.a.really.long.name.like.seetharam.krishnapillai@AReallyLongCompanyNameOfSomeKind.com.au
Даже 92-летний технофоб сообразил бы, как подписаться на красивый короткий адрес Gmail, и просто использовал бы его, а не вводил бы это на своей странице регистрации.
Место на диске, вероятно, не проблема, но есть как минимум две проблемы с разрешением полей ввода пользователя быть во много раз длиннее, чем они должны быть:
Если один из миллиона пользователей должен использовать свой другой адрес электронной почты, чтобы использовать мое приложение, пусть будет так.
(Статистика показывает, что на самом деле никто не вводит более 40 символов для адрес электронной почты, см., например: Ответ ZZ Coder https://stackoverflow.com/a/1297352/87861 )
Если вы действительно задумываетесь об этом, создайте имя пользователя varchar (60), домен varchar (255). Затем вы можете делать смешную статистику использования домена, что немного быстрее, чем делать это как единое поле. Если вы не уверены в оптимизации, это также позволит вашему SMTP-серверу отправлять электронные письма с меньшим количеством подключений / лучшей пакетной обработкой.
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 в отдельные поля, о дополнительных вещах, которые следует иметь в виду:
Для электронной почты, независимо от спецификации, я практически всегда использую 512 (nvarchar). Имена и фамилии похожи.
На самом деле, вам нужно посмотреть, насколько вы заботитесь о том, чтобы иметь немного дополнительных данных. По большей части меня это не беспокоит, поэтому я буду ошибаться в сторону консерваторов. Но если вы решили логически и точно, что вам нужно сэкономить место, сделайте это. Но в целом, будьте осторожны с размерами полей, и жизнь будет хорошей.
Обратите внимание, что, вероятно, не все почтовые клиенты поддерживают RFC, поэтому независимо от того, что он говорит, вы можете столкнуться с разными вещами в дикой природе.
я использую varchar(64) я не думаю, что кто-то может иметь более длинный email