Каков разумный предел длины для полей «Имя» человека?

138

У меня есть простая веб-форма, которая позволит неаутентифицированным пользователям вводить свою информацию, включая имя. Я присвоил полю имени ограничение в 50 символов, чтобы оно совпадало с таблицей моей базы данных, где это поле - varchar (50), но затем я начал задумываться.

Более уместно использовать что-то вроде типа столбца Текст или мне следует ограничить длину имени чем-то разумным?

Я использую SQL Server 2005, на случай, если это важно в вашем ответе.

РЕДАКТИРОВАТЬ: я не видел этот более широкий вопрос относительно аналогичных вопросов.

EndangeredMassa
источник
1
Проверьте этот связанный вопрос для большого обсуждения предмета.
Крис Марасти-Георг
2
Стоит отметить, что в эпоху глобализации varchar обычно НЕ является правильным типом данных, скорее всего, вы должны использовать nvarchar.
Тао
@ Тао: Так как он использует MS SQL Server, я согласен. Но VARCHAR - это правильный тип данных в других реализациях SQL, которые лучше поддерживают UTF-8.
Ден04

Ответы:

142

В каталоге стандартов данных правительства Великобритании предлагается 35 символов для каждого из указанных имени и фамилии или 70 символов для одного поля, содержащего полное имя.

Ян Нельсон
источник
3
Ссылка должна быть обновлена ​​по состоянию на 22 октября 2010 года. Я гуглил по адресу: site: *. Gov.uk Назовите «35 символов» и нашел этот документ правосудия.
Тони Р
Их ссылки кажутся очень плохими ... по состоянию на 8/2012: webarchive.nationalarchives.gov.uk/+/http://…
Томас Б.
6
Самое длинное «разумное» полное имя, которое я нашел, это «Жизель Мари-Луиза Маргарита ЛаФлеш» (длина 39 байт).
user1154664
Чуть больше 54 символа
mestachs
3
Новая Зеландия ограничивает полные имена: они должны быть длиной не более 100 символов, включая пробелы, и не могут содержать символы или цифры. Я думаю, дефисы разрешены в фамилиях, хотя.
Glutnix
27

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

Остерегайтесь настройки колонок в зависимости от локали. Для начала, это настраивает вас на кошмар обслуживания, оставляя в стороне тот факт, что люди мигрируют и берут свои имена с собой.

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

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

Ноэль Косгрейв
источник
Спасибо за ответ, даже если это было какое-то время.
EndangeredMassa
9

Я обычно использую varchar (255) (255 - максимальная длина типа varchar в MySQL).

pix0r
источник
30
И вы также резервируете 255 символов места в ваших графических интерфейсах и других носителях, где отображается имя / фамилия? ;-)
AndrewBourgeois
2
Раньше я думал: «Почему бы не всегда использовать varchar (255)?» Теперь я понимаю, что ограничения длины в основном относятся к пользовательскому интерфейсу, а ограничения, от которых дизайнеры могут зависеть при разработке своего пользовательского интерфейса, сводятся к тому, чтобы использовать слишком много места в базе данных.
JDG
6

Если это полное имя в одном поле, я обычно использую 128 - 64/64 для первого и последнего в отдельных полях - вы просто никогда не узнаете.

Грег Хурлман
источник
6

@ Ян Нельсон: Мне интересно, видят ли другие проблемы там.

Допустим, у вас есть разделенные поля. Всего 70 символов, 35 для имени и 35 для фамилии. Однако, если у вас есть одно поле, вы пренебрегаете пробелом, разделяющим имя и фамилию, сокращая вас на 1 символ. Конечно, это «только» один персонаж, но это может иметь значение между тем, кто вводит свое полное имя, а кем-то нет. Поэтому я бы изменил это предложение на «35 символов для каждого из заданного имени и фамилии или 71 символ для одного поля, содержащего полное имя».

Томас Оуэнс
источник
2
Точка следования этому документу заключается в том, чтобы вы могли взаимодействовать с другими государственными системами Великобритании, поэтому вы не можете индивидуально увеличивать число от 70 до 71 и называть его днем, в противном случае системы с пределом в 70 символов обрежут ваш текст. (Вы не должны хранить данные в обеих формах в своей собственной системе.) На самом деле, ситуация ухудшается, поскольку полное имя включает в себя не только фамилию / имя, но также заголовок и суффикс, которые также имеют ограничение в 35 символов для каждой, для Веселые 143 максимум символов в добавленных полях. Отстойно быть разработчиком, который должен обмениваться данными с обеими формами хранения имен.
Ммитчелл
3
Очевидно, что руководство написано исходя из того, что человек может иметь длинное имя (до 35 символов) или длинную фамилию (до 35 символов), но маловероятно, что ОБА части имени будут такими длинными.
Ян Нельсон
3

В Великобритании есть несколько государственных стандартов, которые успешно справляются с большей частью населения Великобритании - паспортный стол, Агентство по лицензированию водителей и транспортных средств, офис Deed Poll и NHS. Они используют разные стандарты, очевидно.

Изменение вашего имени с помощью Deed Poll позволяет 300 символов ;

Не существует никаких юридических ограничений на длину вашего имени, но мы устанавливаем ограничение в 300 символов (включая пробелы) для вашего полного имени.

NHS использует 70 символов для имен пациентов

ИМЯ
ПАЦИЕНТА Формат / длина: max an70

Паспортный стол допускает 30 + 30 первых / последних, а водительских прав (DVLA) всего 30.

Обратите внимание, что другие организации будут иметь свои собственные ограничения в отношении того, что они будут отображать в документах, которые они представляют - для HM Passport Office ограничение составляет 30 символов каждый для вашего имени и вашей фамилии, а для DVLA ограничение составляет всего 30 символов для вашего имени. ФИО.

Стив Купер
источник
2

То, что вы на самом деле спрашиваете, это связанный, но существенно другой вопрос: как часто я хочу обрезать имена, чтобы разместить их в базе данных? Ответ зависит как от частоты различных длин имен, так и от выбранных максимальных длин. Эта озабоченность уравновешивается опасениями относительно ресурсов, используемых базой данных. Учитывая, как мало разницы в накладных расходах между разными максимальными длинами для поля varchar, я обычно ошибаюсь из-за того, что никогда не вынужден усекать имя и делать поле настолько большим, насколько я осмелился.

Клин
источник
1

Обратите внимание, что во многих культурах есть «вторые фамилии», часто называемые фамилиями. Например, если вы имеете дело с испанцами, они оценят, что фамилия будет отделена от их «фамилии».

Лучше всего определить тип данных для компонентов имени, использовать их для типа данных для фамилии и настроить в зависимости от локали.

ColinYounger
источник
Нет смысла уменьшать ограничения в локалях, которые статистически имеют меньшие значения - размер поля не влияет на занимаемое пространство, если только некоторые значения не занимают эти дополнительные разрешенные символы (и это означает, что вы все равно сделали правильный выбор) !
Тао
0

Среднее имя составляет около 6 букв. Это оставляет 43 для фамилии. :) Похоже, вы могли бы сократить его, если хотите.

Главный вопрос, как вы думаете, сколько строк у вас будет? Я не думаю, что varchar (50) убьет вас, пока вы не получите несколько миллионов строк.

Craig
источник
6
Если у вас есть 50 миллионов значений от 10 до 15 символов в столбце varchar (20) и те же 50 миллионов значений в столбце varchar (50), они будут занимать точно такое же пространство. В этом весь смысл varchar, а не char.
Тао
@Tao см stackoverflow.com/questions/11132357/...
Хабиб Perwad
0

в зависимости от того, кто будет использовать вашу базу данных, например, африканские имена будут делать с varchar (20) для разделения фамилии и имени. однако, это отличается от нации к нации, но ради экономии ресурсов базы данных и памяти, разделите поля фамилии и имени и используйте varchar (30), думаю, это будет работать.

Темба Мабасо
источник