Intereting Posts
Запрос XPath: анализ нескольких путей с использованием одного и того же запроса (Cross Apply / .nodes ()) В списке выбора может быть указано только одно выражение. в sql-запросе dbo.dbo это действительно? Вставка записей списка в базу данных с хранимыми процессами SQL автоматически конвертирует десятичные числа в числовые, когда select & insert Разбить строку SQL-сервера, которая имеет десятичные точки в нескольких столбцах Невозможно найти ни столбца «dbo», ни определяемую пользователем функцию, ни агрегат «dbo.FN_Split», либо имя неоднозначно Невозможно вставить арабские данные в SQL Server Массовая вставка в инфраструктуру сущности Проблема в восстановлении базы данных в C # СУММ в рекурсивной процедуре NULL против пустой строки Как мне запрашивать таблицы, расположенные в другой базе данных? Как форматировать значения dd-mmm-yy в плоском файле для smalldatetime во время импорта данных? VS2013 – SQL Server Unit Test – Тайм-аут запроса

sql varchar (max) vs varchar (исправить)

Каждый раз, когда я путался для выбора типа данных varchar (max) или varchar (fix). предположим, что у меня есть столбец данных, который будет около 5000 varchar. столбец не является нулевым типом.

должен ли я установить его varchar (max) не null или varchar (5000), но не null.

то же самое в случае типа данных с нулевым значением.

CREATE TABLE [dbo].[tblCmsPages]( [CmsPagesID] [int] IDENTITY(1,1) NOT NULL, [PageName] [varchar](250) NOT NULL, [PageContent] [varchar](max) NOT NULL, [Sorting] [int] NOT NULL, [IsActive] [bit] NOT NULL) 

//или

 CREATE TABLE [dbo].[tblCmsPages]( [CmsPagesID] [int] IDENTITY(1,1) NOT NULL, [PageName] [varchar](250) NOT NULL, [PageContent] [varchar](5000) NOT NULL, [Sorting] [int] NOT NULL, [IsActive] [bit] NOT NULL 

// [PageContent] будет 5000 char или одиночный символ или null, то что я должен взять.

Один другой думаю, что я хочу знать. В чем основное отличие от null, а не от нуля . Это только для проверки проверки и того, что влияет на производительность.

Solutions Collecting From Web of "sql varchar (max) vs varchar (исправить)"

MSDN

  • Используйте varchar, когда размеры записей столбцов значительно различаются.
  • Используйте varchar (max), когда размеры записей данных столбца сильно различаются, а размер может превышать 8 000 байт.

Когда длина указана при объявлении переменной или столбца VARCHAR , допустимая максимальная длина равна 8000 . Если длина больше 8000 , вы должны использовать спецификатор MAX как длину. Если указана длина больше 8000, будет обнаружена следующая ошибка (при условии, что указанная длина равна 10000 ):

Размер (10000), присвоенный типу «varchar», превышает максимально допустимый для любого типа данных (8000).

ОБНОВЛЕНИЕ: – Я нашел ссылку, которую хотел бы поделиться: –

Вот

Между Varchar[(n)] и Varchar(Max) не так много разницы в производительности. Varchar[(n)] обеспечивает лучшие результаты работы по сравнению с Varchar(Max) . Если мы знаем, что данные, которые будут храниться в столбце или переменной, меньше или равны 8000 символам, то использование этого типа данных Varchar [(n)] обеспечивает лучшую производительность по сравнению с Varchar (Max). Пример: когда я запускал ниже сценарий, изменив тип переменной @FirstName на Varchar(Max) затем на 1 миллион присваиваний он последовательно принимает двойной раз, чем когда мы использовали тип данных как

 Varchar(50) for variable @ FirstName. DECLARE @FirstName VARCHAR(50), @COUNT INT=0, @StartTime DATETIME = GETDATE() WHILE(@COUNT < 1000000) BEGIN SELECT @FirstName = 'Suraj', @COUNT = @COUNT +1 END SELECT DATEDIFF(ms,@StartTime,GETDATE()) 'Time Taken in ms' GO 

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

Это зависит от того, сколько данных вы храните, сколько доступно и насколько важно. Существует не волшебное правило, которое подходит ко всем, что я боюсь.

Что касается разрешения null или не null: Лично я предпочитаю, в большинстве случаев, допускать null. Прежде всего нуль означает что-то, а во-вторых, я предпочитаю устанавливать такие ограничения в интерфейсе. Но это зависит от сохраненных данных.

У вас есть четкое представление о данных, оно не будет превышать 5000, я предпочитаю varchar (n) (varchar (5000).

Если вы хотите выбрать между varchar (n) и varchar (max), обратите внимание ниже:

  1. При необходимости используйте VARCHAR (n) над VARCHAR (MAX)

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

    б. потому что данные VARCHAR (MAX) не сжимают

  2. Хранение больших строк занимает больше времени, чем хранение небольших строк.

  3. Обновление значения VARCHAR (MAX) в строке с 8000 до 8000 будет относительно медленным, но разница для одной транзакции, вероятно, не будет измерима.

  4. Обновление значения VARCHAR (MAX) в строке в размере от 8000 до менее 8000 будет быстрее, чем если таблица настроена на сохранение данных вне строки.

  5. Использование опции out-of-row для VARCHAR (MAX) приведет к медленной записи до тех пор, пока строки не будут очень длинными.

Чем больше varchar, тем больше пространства потребуется вашей базе данных. Лучшая практика заключается в том, чтобы выделить как можно меньше места, поэтому в вашем случае второй код лучше.

 [PageContent] [varchar](5000) NOT NULL, 

В этом случае вы не можете хранить более 5000 символов в столбце.

сначала дайте мне разницу между обоими

Столбец nvarchar может хранить любые данные Unicode. Столбец varchar ограничен 8-разрядной кодовой страницей. Некоторые люди думают, что вархар следует использовать, потому что он занимает меньше места. Я считаю, что это не правильный ответ. Codepage incompatabilities – это боль, а Unicode – это средство для проблем с кодировкой. В наши дни с дешевым диском и памятью, нет никаких оснований тратить время на списание кодовых страниц.

Все современные операционные системы и платформы разработки используют Unicode. Используя nvarchar, а не varchar, вы можете избегать конверсий при каждом чтении или записи в базу данных. Конверсии требуют времени и подвержены ошибкам. И восстановление от ошибок преобразования является нетривиальной проблемой.

Если вы взаимодействуете с приложением, использующим только ASCII, я бы по-прежнему рекомендовал использовать Unicode в базе данных. Алгоритмы сопоставления ОС и базы данных будут работать лучше с Unicode. Unicode избегает проблем с конверсией при взаимодействии с другими системами. И вы будете готовиться к будущему. И вы всегда можете подтвердить, что ваши данные ограничены 7-разрядным ASCII для любой прежней системы, которую вы должны поддерживать, даже наслаждаясь некоторыми преимуществами полного хранилища Unicode.

И если вы используете размер исправления, предположите 5000, то вы можете сохранить до 5000 только в том случае, если длина текста увеличится, тогда вы получите сообщение об ошибке. поэтому [PageContent] [varchar](max) NOT NULL, лучше, но если вы уверены, что длина строки не будет больше больше 5000, тогда [PageContent] varchar NOT NULL лучше

nchar [ ( n ) ] Строковые данные Unicode с фиксированной длиной. n определяет длину строки и должно быть значением от 1 through 4,000 . Размер хранилища равен двум байтам. Если на кодовой странице кода используется двухбайтовые символы, размер хранилища по-прежнему равен n байтам. В зависимости от строки размер хранилища в n байтах может быть меньше значения, указанного для n. Синонимы ISO для nchar являются национальными и национальными символами.

nvarchar [ ( n | max ) ] Строковые данные Unicode переменной длины. n определяет длину строки и может быть значением от 1 до 4000. max указывает, что максимальный размер хранилища составляет 2 ^ 31-1 байта (2 ГБ) . Размер памяти в байтах в два раза превышает фактическую длину введенных данных + 2 байта. ИСО-синонимы для nvarchar – это национальный символ, различный и национальный характер.

По словам меня, используйте nvarchar [ ( n | max ) ] поэтому вы не будете зависеть от длины строки

ref: для получения дополнительной информации https://msdn.microsoft.com/en-IN/library/ms186939.aspx