sql varchar(max)vs varchar(fix)

vic*_*cky 10 sql sql-server sql-server-2008

每次我混淆选择varchar(max)或varchar(fix)数据类型.假设我有一个大约5000 varchar的数据列.列不是null类型.

我应该设置varchar(max)not null或varchar(5000)not 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) 
Run Code Online (Sandbox Code Playgroud)

//要么

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
Run Code Online (Sandbox Code Playgroud)

// [PageContent]将是5000个char或单个char或null然后我应该采取什么.

彼此想我想知道.nullnot null之间的主要区别是什么.它仅用于验证检查以及对性能的影响.

Sur*_*ngh 9

MSDN

  • 当列数据条目的大小变化很大时,请使用varchar.
  • 当列数据条目的大小变化很大时,使用varchar(max),大小可能超过8,000个字节.

在声明VARCHAR变量或列时指定长度时,允许的最大长度为 8000.如果长度大于8000,则必须使用说明 MAX符作为长度.如果指定的长度大于8000,将遇到以下错误(假设指定的长度为10000):

给'varchar'类型的大小(10000)超过了任何数据类型允许的最大值(8000).

更新: - 我找到了一个我想分享的链接: -

这里

Varchar[(n)]和之间没有太大的性能差异Varchar(Max).Varchar[(n)]提供更好的性能结果Varchar(Max).如果我们知道要存储在列或变量中的数据小于或等于8000个字符,那么与Varchar(Max)相比,使用此Varchar [(n)]数据类型可提供更好的性能.例如:当我运行下面的时候脚本通过将变量@FirstName类型更改为Varchar(Max)然后为100万个赋值,它始终比我们使用数据类型时花费的时间加倍

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 
Run Code Online (Sandbox Code Playgroud)


Kum*_*PMP 5

你对数据有清晰的认识,它不会超过5000,我更喜欢varchar(n)(varchar(5000).

如果您想在varchar(n)和varchar(max)之间进行选择,请注意以下几点:

  1. 在适当的地方,使用VARCHAR(n)而不是VARCHAR(MAX)

    一个.出于良好设计的原因,如果没有性能优势,

    湾 因为VARCHAR(MAX)数据不会压缩

  2. 存储大字符串比存储小字符串需要更长的时间.

  3. 将行内VARCHAR(MAX)值从低于8,000更新到超过8,000将相对较慢,但单个事务的差异可能无法测量.

  4. 将行内VARCHAR(MAX)值从8,000以上更新到8,000以下将比将表设置为在行外存储数据更快.

  5. 使用VARCHAR(MAX)的行外选项将导致写入速度变慢,直到字符串很长.