Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何达到每行8060字节和每个(varchar,nvarchar)值8000字节的限制?

如何达到每行8060字节和每个(varchar,nvarchar)值8000字节的限制?
EN

Stack Overflow用户
提问于 2010-09-25 08:20:14
回答 2查看 4.5K关注 0票数 3

从我的问题"8078 bytes in 8060 B datapage (SQL Server)?“开始,它向我解释了如何在MS SQL Server中获得每页8078字节的数据。

如果我计算只有一行和一列无索引的固定大小类型记录(根据MSDN文章Estimating the Size of a Heap)用于数据存储(没有开销)的每页字节数,那么我得出的结果是8087字节(每页)。

如何在不购买和学习1000+页面书籍的情况下达到每行8060字节的限制(在我的其他问题的答案中提到)和每行8000字节的限制(varchar,nvarchar)?

我肯定在存储分配中遗漏了一些东西:需要管理的块越少,开销就越大……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-25 09:44:53

Inside the Storage Engine: Anatomy of a record

这是针对SQL Server 2005的

  • 记录头
    • 4字节长
    • 两个字节的记录元数据(记录类型)
    • 两个字节在记录中指向NULL类型

  • 记录的固定长度部分,包含存储具有固定长度的数据类型的列(例如bigint、char(10)、datetime)
  • 空位图
    • 两个字节用于记录中的列数
    • 在记录中每列存储一位的可变字节数,而不管该列是否可为空(这与SQL Server2000不同,也更简单,后者每个可为空的列只有一位)

    < NULL

>H122这允许在读取空列时进行优化

  • variable-length列偏移量数组
    • 两个字节用于可变长度列的计数
    • 每个可变长度列两个字节,给出列值版本控制标记

末尾的偏移量

  • 这只在SQL Server2005中提供,它是一个14字节的结构,其中包含一个时间戳和一个指向tempdb

中版本存储区的指针

因此,对于一个字符(8000)

  • 4字节(记录头)
  • 8000 fixed length
  • 3空位图
  • 2字节to count variable-length
  • 14 timestamp

但是,如果您有40个varchar(200)列

  • 4字节(记录头)
  • 0固定长度
  • 6空位图
  • 2字节计数variable-length
  • 202 x 40 = 8080
  • 14时间戳

总数= 8080 +4+6+2+ 14 = 8106。见鬼?创建此表时,您会收到一条警告

我不会太在意它:这个信息在日常生活中没有实际的价值()。

票数 6
EN

Stack Overflow用户

发布于 2010-09-25 14:12:39

我不完全确定您在问什么,但是如果您的问题是“为什么最大行长度是8060字节,而不是其他数字?”,或者“为什么NVARCHAR的最大长度是8000字节?”那么简短的答案就是,谁知道呢?(正如gbn所说,谁在乎?)

所有MSSQL限制-数据类型大小、最大行大小、每个表的列、每个索引的列等-都是Microsoft的设计决策。我非常确定这些决策背后有大量的工程文档,但大多数人都无法访问这些信息。

如果您对限制是什么、如何计算行大小等特定细节感兴趣,那么阅读MSSQL文档是最好的起点。

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

https://stackoverflow.com/questions/3793022

复制
相关文章
varchar和nvarchar区别
Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表
西柚dzh
2022/06/09
4740
关于数据存储类型的一点分析
简介     SQL Server每个表中各列的数据类型的有各种形式,产生的效果也各有不同,我们主要根据效率兼顾性能的情况下讨论下如何规定类型。     在SQL Server中,数据的存储以页为单位。八个页为一个区。一页为8K,一个区为64K,这个意味着1M的空间可以容纳16个区。       SQL Server中的分配单元分为三种,分别为存储行内数据的In_Row_Data,存储Lob对象的LOB_Data,存储溢出数据的Row_Overflow_data。下面我们通过一个更具体的例子来理解这三种分配
用户1217611
2018/01/30
8940
关于数据存储类型的一点分析
【SQL Server】系统学习之二:索引优化
页大小8192个字节,行限制为8060字节(大型对象除外)。 包含varchar nvarchar varbinary sql_variant(8012,object类型) clr 的行,如果行大小超过8060,最大的上述列,被移动到行溢出分配单元。如果列超过8000,还会被存储为大型对象。 分配单元:IN_ROW_DATA               Row_OVERFLOW_DATA               LOB_DATA 分配顺序扫描:基于IAM页(索引分配映射) 一个IAM只能映射某一个表分区
小端
2018/04/11
7540
【SQL Server】系统学习之二:索引优化
常用的数据库的字段类型及大小比较_sql字段长度
ORACLE的数据类型 常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes ` VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题 LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作 RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等 LONG RAW 可变长度的二进制数据 最大长度2G 同上 BLOB 二进制数据 最大长度4G CLOB 字符数据 最大长度4G NCLOB 根据字符集而定的字符数据 最大长度4G BFILE 存放在数据库外的二进制数据 最大长度4G ROWID 数据表中记录的唯一行号 10 bytes **.*.*格式,*为0或1 NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes NUMBER(P,S) 数字类型 P为整数位,S为小数位 DECIMAL(P,S) 数字类型 P为整数位,S为小数位 INTEGER 整数类型 小的整数 FLOAT 浮点数类型 NUMBER(38),双精度 REAL 实数类型
全栈程序员站长
2022/10/04
3.9K0
常用的数据库的字段类型及大小比较_sql字段长度
MySQL数据库设计
  mysql:    dbs  数据库系统    bdms  数据库管理系统    bda   数据库管理员    db    数据库    dba通过dbms来操作db! 软件项目开发周期中数据库设计 01.需求分析阶段:分析客户的业务和数据处理需求 02.概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整 03.详细设计阶段:应用三大范式审核数据库结构 04.代码编写阶段:物理实现数据库,编码实现应用 05.软件测试阶段:…… 06.安装部署:……   数据库设计步骤:     0
房上的猫
2018/03/14
2.6K0
SQLServer中char、varchar、nchar、nvarchar的区别:
nvarchar(n) :包含 n个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
孙晨c
2019/09/05
5.9K0
SQLServer中char、varchar、nchar、nvarchar的区别:
混合字节序、小字节序和大字节序(网络字节序)
下面代码可能的输出结果是() int main() {         unsigned x = 0x12345678;         unsigned char *p = (unsigned char*)&x;         for (int i=0; i<4; i++)         {                 printf("%x\n", *p);                 p++;         }         return 0; } 参考:http://zh.wikipedia.org/wiki/字节序
一见
2018/08/10
7870
数据库中char varchar nchar nvarchar的区别
我们在进行数据库的设计的时候,很多情况下表中的字段都是用的是字符串类型的数据,其中就有四种选择char varchar nchar nvarchar,我们该如何进行?
瑞新
2020/07/08
7520
SQL Server中char、nchar、varchar、nvarchar的区别
对于程序中的一般字符串类型的字段,SQL Server中有char、varchar、nchar、nvarchar四种类型来对应,那么这四种类型有什么区别呢,这里做一下对比。
用户7353950
2022/06/23
1.6K0
SQL Server中char、nchar、varchar、nvarchar的区别
nchar,char,varchar与nvarchar区别「建议收藏」
今天建合作用的数据库,发现每个字段默认的类型为nchar(10),以前我们经常接触的也就是char和varchar,那前面加了n之后会有什么不同呢?
全栈程序员站长
2022/08/09
7060
字节和字符
位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数。
泰斗贤若如
2019/10/13
2.4K0
Oracle三大类型(varchar2,number,date)转换
Oracle中三大类型与隐式数据类型转换  (1)varchar2变长/char定长-->number,例如:'123'->123 (2)varchar2/char-->date,例如:'25-4月-15'->'25-4月-15' (3)number---->varchar2/char,例如:123->'123' (4)date------>varchar2/char,例如:'25-4月-15'->'25-4月-15'
星哥玩云
2022/08/17
2.8K0
腾讯和字节待遇_字节和腾讯哪个值得去
大家好,我是鱼皮,最近这段时间,应该是正值大三的小伙伴最忙碌的时候,不少同学都在准备秋季校园招聘。
全栈程序员站长
2022/11/08
2.2K0
腾讯和字节待遇_字节和腾讯哪个值得去
nvarchar,nchar,vchar,nvchar,char…
nvarchar,nchar,vchar,nvchar,char,ntext,text区别详解 联机帮助上的:
恋喵大鲤鱼
2018/08/03
1K0
数据库 — char、varchar、varchar2区别
char是定长的,varchar是变长的。varchar2应该是varchar的升级,只有ORACLE才有,这里不作讨论。
全栈程序员站长
2022/09/06
7200
sqlite 数据类型
一般数据采用固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。
阳光岛主
2019/02/19
2.4K0
支持超过4000字节的varchar2类型
Oracle中最常用的字符串类型可能就是varchar2了,但是一直以来,让人吐槽最多的,可能就是他的存储容量,12c之前,允许存储4000字节,请注意这的单位是字节,如果你按照非常规的字符定义字段,就得结合字符集,确定他能存储的容量。如果要存储超过这个限制的字符,就得改为CLOB类型了,他的容量是4G,另外一种变通的形式,不想使用大字段,就将要存储的字符拆成多个varchar2类型的字段,读的时候拼接这些字段,起到一样的效果。
bisal
2021/09/06
1.2K0
支持超过4000字节的varchar2类型
关于多字节、宽字节、WideCharToMultiByte和MultiByteToWideChar函数的详解
根据给定的文章内容,撰写摘要总结。
林冠宏-指尖下的幽灵
2018/01/02
2.4K0
你知道 varchar(N) 或 varchar2(N) 中的 N 是字符数还是字节数?
其中 book_name 是 varchar(20) 类型。 插入 sql 语句如下:
IT技术小咖
2020/02/13
4.3K0
你知道 varchar(N) 或 varchar2(N) 中的 N 是字符数还是字节数?
Java面试手册:数据库 ②
使用数据库的必要性 无论是集合、对象、程序一旦重启所有数据全部消失,无法做到持久化保存 xml 是可以保存数据的 另外还可以通过IO流将数据保存到本地磁盘,但是数据缺乏结构化,无法描述复杂的业务逻辑,且读写比较慢。 java 里面双引号表示String 类型,单引号表示char类型,而数据库中是char(长度不尅变)和varchar(长度可变) 关于数据库 一个项是数据库先行(表结构的设计、关系到项目的成败),每一个项目都有自己的数据库,项目经理将创建好的数据库放到一个服务器上,但开发的时候是个人考下
南风
2018/12/10
1.3K0
Java面试手册:数据库 ②

相似问题

SQL Server 2008中是否调整了每行8060字节的限制?

33

SQL NVARCHAR和VARCHAR限制

56

如何限制文本区域的每行字节?

21

为什么varchar的最大长度小于8000字节?

42

在Server中超过每行8060字节的性能影响是什么?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文