2009-05-28 3 views
3

При разработке базы данных, какие решения вы принимаете при определении того, насколько велика ваша nvarchar.Как вы делаете свой Nvarchar()

Если бы я должен был составить адресную таблицу, моя реакция кишки была бы на адресную строку 1, чтобы быть nvarchar (255), как старая база данных доступа.

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

Как большой я должен сделать мой NVARCHAR (????)

+0

Должно быть в спецификации требований, не так ли? ;-) –

+1

Я предполагаю, но если вы тот, кто делает спецификацию, то это сводится к вам ... – Paul

ответ

3

Моя рекомендация: сделайте их такими же большими, как вы, действительно, нужны им.

E.g. для столбца почтового индекса достаточно 10-20 символов. То же самое касается номера телефона. E-Mail может быть длиннее, 50-100 символов. Имена - ну, я обычно обойдусь с 50 символами, а для первых имен. Вы можете всегда и легко расширять поля, если вам действительно нужно - это не большая задача.

Невозможно создать все поля varchar/nvarchar настолько, насколько это возможно. В конце концов, страница SQL Server фиксирована и ограничена 8060 байтами в строке. Имея 10 полей NVARCHAR (4000), просто спрашивает о проблемах ... (поскольку, если вы на самом деле пытаетесь заполнить их слишком большим количеством данных, SQL Server будет вам запрещен).

Если вам действительно нужно действительно большое поле, используйте NVARCHAR/VARCHAR (MAX) - они хранятся на вашей странице, если они подходят, и будут отправляться в хранилище «переполнения», если они становятся слишком большими.

NVARCHAR vs. VARCHAR: это действительно сводится к тому, что вам действительно нужны «экзотические» персонажи, такие как японский, китайский или другие персонажи, отличные от ASCII? В Европе даже некоторые восточно-европейские персонажи больше не могут быть представлены полями VARCHAR (они будут лишены своего хакека («орфография?»). Западно-европейские языки (английский, немецкий, французский и т. Д.) Очень хорошо обслуживаются VARCHAR

нО: NVARCHAR действительно использует в два раза больше места - на диске и в памяти SQL Server - во все времена Если вам действительно нужно, вам это нужно - но вы действительно :-) Это..? вам решать.

Марк

+1

И если мое приложение использовалось россиянами, тогда да, мне это нужно. Спасибо – Paul

3

Я не использую NVARCHAR лично :-) Я всегда использовать VARCHAR.

Однако я стараюсь использовать 100 для имени и 1000 для комментариев. Ловушка и работа с более длинными строками - это то, что клиент может делать, скажем, через регулярное выражение, поэтому SQL получает только данные, которые он ожидает.

Вы можете избежать ошибок усечения при параметризации вызовов, например, через хранимые процедуры. Если параметр определен как varchar (200), скажем, тогда усечение происходит молча, если вы отправляете> 200. Ошибка усечения выбрасывается только для оператора INSERT или UPDATE: с параметрами этого не произойдет.

255 "предел" для SQL Server восходит к 6.5, поскольку vachar была ограничена 255. SQL Server 7.0 + изменено на 8000 и добавлена ​​поддержка юникода

Edit:

Почему я не Использование nvarchar: двойной объем памяти, двойной размер индекса, двойной размер диска, просто не нужно. Я работаю в большой швейцарской компании с офисами по всему миру, поэтому я не сторонник.

Также обсуждается здесь: varchar vs nvarchar performance

На дальнейших размышлений, я хотел бы предложить Юникода обращения к разработчикам клиента, но как DBA разработчиков я сосредоточиться на производительности и эффективности ...

+0

Зачем вам ограничивать комментарии 100? Переполнение стека позволяет 600. Какой тип данных вы используете? – Paul

+0

Почему вы не используете nvarchar? Что вы используете вместо этого? –

+0

@Paul: 1000! aarrgghhh ... – gbn

0

Это зависит от того, что поле представляет. Если я делаю быстрый прототип, я оставляю значения по умолчанию 255. Для чего-либо вроде комментариев и т. Д. Я бы, вероятно, поставил его на 1000.

Единственный способ, которым я мог бы сделать это меньше, это то, что я определенно знаю siez, почтовые индексы или номера NI и т. д.

0

Для столбцов, которые нужно иметь определенные ограничения на - как имена, электронные письма, адреса и т.д. - вы должны поставить достаточно высокую длину макс. Например, первое имя более 50 символов кажется немного подозрительным, а вход над этим размером, вероятно, будет содержать больше, чем просто имя. Но для первоначального дизайна базы данных возьмите этот разумный размер и удвоить его. Итак, для первых имен установите 100 (или 200, если 100 - ваш «разумный размер»). Затем добавьте приложение в производство, пусть пользователи будут играть в течение достаточно долгого времени, чтобы собрать данные, а затем проверить фактический max(len(FirstName)). Существуют ли там подозрительные данные? Что-нибудь выше 50 символов? Узнайте, что там, и посмотрите, действительно ли это имя или нет. Если это не так, форма ввода, вероятно, нуждается в более подробных объяснениях/валидации.

Сделайте то же самое для комментариев; Сначала установите их на nvharchar(max). Затем вернитесь , когда ваша база данных выросла настолько, что вы можете начать оптимизацию производительности.. Возьмите максимальную длину комментариев, удвойте ее и у вас будет хорошая максимальная длина для вашей колонки.

Смежные вопросы