Существует ли причина, почему я не должен использовать NVARCHAR в SQL-сервере?

Это то, для чего нужны типы. Тип, который вы используете для времен, должен отражать ограничения, которые вы хотите наложить на значения, которые он представляет.

Например, вы можете обернуть UTCTime примерно так:

newtype UTCTimeMicroseconds = UTCTimeMicroseconds { picos :: UTCTime }

microsecondsFromPicos :: UTCTime -> UTCTimeMicroseconds
microsecondsFromPicos = ...

getCurrentTimeMilliseconds :: IO UTCTimeMicroseconds
getCurrentTimeMilliseconds = microsecondsFromPicos <[110]gt; getCurrentTime

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

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

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

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

6
задан gbn 9 September 2009 в 05:04
поделиться

5 ответов

В сегодняшнем i18n мире nvarchar имеет большой смысл. varchar мог бы иметь смысл для данных, которые указаны, чтобы не быть unicode (возможно, у Вас есть некоторые системные поля, которые потребованы быть ASCII).

Я использовал бы nvarchar по умолчанию для вещей как имена, описания, адреса, и т.д.

varchar меньше, таким образом, существуют, возможно, некоторые сбережения IO с varchar nvarchar (но обратите внимание, что кодовая страница становится большей проблемой также).

11
ответ дан 8 December 2019 в 12:23
поделиться

Кроме того, посмотрите этот вопрос: VARCHAR по сравнению с производительностью NVARCHAR.

Лично, я говорю, придерживаются varchar (как я ответил в этом потоке). Наверху существует нетривиальная производительность.

4
ответ дан 8 December 2019 в 12:23
поделиться

Мы используем VARCHAR почти для всего и NVARCHAR только очень достаточно редко.

Для Кодов продуктов не нужен NVarchar - мы ничего не позволяем кроме A-Z, 0-9 и "_" в них...

Дважды пространство памяти, но также и только имеют половину записей на индексную страницу (и на страницу данных), и половина кэша памяти "потрачена впустую", больше циклов ЦП для сравнения данных, и так далее.

IME наиболее часто используемая внешняя работа диакритических знаков просто находят в Varchar (т.е. латинский 1). У нас нет планов сделать китайский язык или другие наборы альтернативного символа, и когда мы сделаем способность обработать это characterset при наличии использования NVarchar со Дня, Каждый будет наименьшим количеством наших забот - Справа налево или Выравнивание по вертикали текста??:(

И если Вы позволили NVarchar для, скажем, Имени, как Вы собираетесь ввести расширенный charcater в с Вашей клавиатуры? И если Вы импортируете данные (таким образом, это уже - NVarchar), как будут Вами способный искать того клиента, использующего Вашу стандартную QWERTY-клавиатуру. Партии и партии, связанные с интернационализацией приложения, таким образом, мое представление состоит в том, что нет никакого смысла, "допуская ее при помощи NVarchar".

Но там снова много мест я иду, чтобы иметь NVarchar..., и большинство столбцов является 50 символами, широкими, также.... они должны знать что-то о приросте населения, и расширение планирует почтовые индексы, которые я не делаю!!

2
ответ дан 8 December 2019 в 12:23
поделиться

Да, производительность, в размере. nvarchar берет больше байтов, я думаю, что это является двойным (исправьте меня, если я неправ), и это из-за поддержки unicode. Таким образом, если Вам не нужна поддержка unicode, пойдите с регулярным varchar.

1
ответ дан 8 December 2019 в 12:23
поделиться

Как упомянуто уже, компромисс соответствует требованиям завтрашнего дня по сравнению с производительностью. По моему опыту, SQL Server делает довольно хорошо с более низким ЦП и ограничениями памяти, но дает ему медленный диск ввод-вывод, и он может действительно двинуться с пыхтением.

Если Вы не имеете никаких планов относительно наборов символов двойного байта (т.е. китайские символы), придерживаетесь VARCHAR (МАКС).

1
ответ дан 8 December 2019 в 12:23
поделиться
Другие вопросы по тегам:

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