CREATE TABLE [t1] (
[c1] [char] (36) not null, --36
[c2] [char] (8000) NULL , --8000
[c3] [varchar] (8000) NULL , --又8000
[c4] [nvarchar] (4000) NULL
)
[c1] [char] (36) not null, --36
[c2] [char] (8000) NULL , --8000
[c3] [varchar] (8000) NULL , --又8000
[c4] [nvarchar] (4000) NULL
)
解决方案 »
- SQL一简单到不能再简单的问题~
- 这种条件SQL怎么排序?
- 怎样一行分成几行?
- =======100W条数据查询优化问题===========
- SQL函数传参
- 计算机四级考试数据库工程师!!有经验的推荐几本好的教程和练习!!
- 求教Sql2000 UniCode问题
- 把txtbox的一偏文章导入数据库,怎么设置可以使存储到数据库中的内容,发现一个制表符就自动数据库中的表中就多一条记录
- 谁能告诉我.这样做对吗
- 真奇怪:我用ado连接sql server数据库,为什么连本地数据库不行,连服务器数据库正常?请看以下代码.另外:我的ado连接的应用程序发布时要加什么文件吗?
- 大侠帮帮忙,insert 队列的实现
- 不定义变量如何判断数据是否在表中已存在?
也可以使用TEXT/NTEXT类型.
至于怎末申请内存,和这点没太大关系,不过,mssql在进行DML操作时,是要申请内存的,具体可以看看MSSQL的锁内部机制。
那么c3和c4是变长字符,变长字符类型在定义时,要预先分配几个字节的空间,然后会根据实际值的大小再分配空间,当然,C3和C4由于不一种变长类型,预分配的也不一样,这样,根据楼主提供的例子,8060-8036=24,24-13=11,那么这11个字节就是预分配给C3和C4字段的空间,上个帖子里,由于该块是该段的第一个块,所以,132个字节里,应该还有段定义占用的字节数,也就是段头的信息,这样这个空间基本就是这个样子:
132(块头信息+段头信息)+36(为c1分配)+8000(为c2分配)+11(为c3和c4预分配)+13(块内剩余空间)=8192
至于块头、段头、为VARCHAR和NVARCHAR预分配的具体字节数,我不记得了,大家有机会可以查查看,我有时间也查一下,希望和大家一起讨论。
当然至于大数据类型(TEXT,IMAGE)的存储和这不一样的。