首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql varchar(max) vs varchar(fix)

sql varchar(max) vs varchar(fix)
EN

Stack Overflow用户
提问于 2015-03-11 07:07:13
回答 5查看 9K关注 0票数 12

每次我为选择varchar(max)或varchar(fix)数据类型而感到困惑时。假设我有一个大约5000 varchar的数据列。列不是空类型。

我应该设置varchar(max) null还是varchar(5000) null。

在可空数据类型的情况下也是一样的。

代码语言:javascript
复制
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) 

/或

代码语言:javascript
复制
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个字符或单个字符或null,那么我应该使用什么。

彼此认为我想知道。not null的主要区别是什么?它是否仅用于验证检查以及对性能的影响。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-03-11 07:25:43

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(n)数据类型可以提供更好的性能,而不是Varchar(Max).Example:当我通过将变量@FirstName类型更改为Varchar(Max)来运行下面的脚本时,在100万次赋值中,它始终要比使用数据类型作为Varchar(50)用于变量@FirstName时花费两倍的时间。

代码语言:javascript
复制
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 
票数 11
EN

Stack Overflow用户

发布于 2015-03-11 07:21:00

你对数据有清楚的了解,它不会超过5000,我更喜欢varchar(n)(varchar(5000) )。

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

  1. 在适当情况下,在VARCHAR(最大)上使用VARCHAR(n) a.出于良好设计的原因,如果没有性能效益,以及 b.因为VARCHAR(最大)数据不压缩
  2. 存储大字符串比存储小字符串花费的时间更长。
  3. 将一行VARCHAR(最大值)值从8,000以下更新到8,000以上将相对缓慢,但单个事务的差异可能是不可测量的。
  4. 如果将表设置为将数据存储在行外,则从8,000以上更新到8,000以下的VARCHAR(最大)值将更快。
  5. 使用VARCHAR(MAX)的行外选项将导致较慢的写入,直到字符串非常长。
票数 5
EN

Stack Overflow用户

发布于 2015-03-11 07:15:00

“大约5000”-如果你不知道,那么设置是最大可能是最好的选择。另一方面,如果你知道它不会超过6000,你最好使用这个上限来节省一些空间。

这在很大程度上取决于存储了多少数据,访问了多少数据,以及数据的重要性。没有什么神奇的规则适合我所担心的一切。

至于允许空还是非空,我个人更喜欢,在大多数情况下,允许空。首先,null意味着什么,其次,我更喜欢在前端设置这样的限制。当然,这取决于存储的数据。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28980502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档