标签归档:数据类型

mssql sqlserver 如何存储图片(image)呢?


摘要:
下文通过举例的方式讲述在sqlserver中存储图片的方法分享,如下所示:
实验环境:sql server 2008 R2



image存储图片的数据类型分享

在sqlserver,如果我们想把一张图片作为数据直接存储到sqlserver中,我们可以将sqlserver的数据表定义为以下任意一种数据类型即可。
如:
varbinary :可存储图片大小不超过8K
binary :可存储图片大小不超过8K
varchar:可存储图片大小不超过8K
nvarchar:可存储图片大小不超过8K
char:可存储图片大小不超过8K
nchar:可存储图片大小不超过8K
image :可存储图片大小不超过2^-1个字节
varchar(max) :可存储图片大小不超过2^-1个字节
nvarchar(max) :可存储图片大小不超过2^-1个字节
text :可存储图片大小不超过2^-1个字节
ntext :可存储图片大小不超过2^-1个字节

    ---例:定义一张存储图片的数据表,imgInfo字段用于存储数据库信息
    create table [maomao365.com](keyId int identity(1,1),
     imgInfo varchar(max)
    )


image存储图片的原理说明

当一个图片需要存储至数据库中时,此时我们需要将可将图片转换为二进制信息,然后再放入至数据库指定的字段中,达到永久保存的目的。

在sqlserver中,只要数据类型可存储二进制信息或字符串信息,我们就可将此数据类型作为存储图片的数据类型进行使用。

mssql sqlserver 数据类型binary、varbinary、image之间的区别说明


摘要:
下文将讲述sqlserver中数据类型binary varbinary image三者之间的区别,如下所示:
实验环境:sql server 2008 R2



varbinary数据类型

varbinary数据类型,可存储的为一个变长的二进制数据,最大长度不能唱过8000字节。

declare @maomao varbinary(3000)
 ----以上定义代表变量@maomao 最大可存储3000字节,最小可存储0字节(占用0字节) 


binary数据类型

binary数据类型,是一个定长二进制数据类型,最大可存储长度为8000字节。

declare @maomao binary(3000)
 ----以上定义代表变量@maomao 占用空间为3000字节,无论其中所存储数据的多少 


image数据类型

这是一个可变长的二进制数据类型,最大可存储大小为2^-1个字节。


binary、varbinary、image之间的区别分别为以下几点:
1.占用的存储空间不同
varbinary image 是可变的,而binary定义后可变空间不发生变化
2.可接收的最大二进制数据值不同
varbinary binary 可接收的最大字节数为8000
image 为2^-1个字节


注意事项:
以上三种数据类型,在sqlserver中都可存储二进制数据,但是在微软的官方版本中,建议我们存储二进制数据时,使用nvarchar(max)、varchar(max)、varbinary(max)三种数据类型。

mssql sqlserver 2008 hierarchyid 数据类型应用及简介说明


摘要:
hierarchyid 数据类型,是sqlserver 2008中新增的一个CLR数据类型,此数据类型应用于存储具有层级的结构图
例:直接在员工表中存储员工所属的组织结构信息
实验环境:sql server 2008 R2


例:

 CREATE TABLE [maomao365.com]
   (
    IdInfo hierarchyid NOT NULL, ---存储员工组织结构信息
    userId INT NOT NULL,
    userName VARCHAR(50) NOT NULL,
    userExtend VARCHAR(50) NOT NULL
   )
GO

--插入员工信息,列IdInfo为hierarchyid类型,必须以"/"开头和"/"结束,中间放入其路径信息 

INSERT INTO dbo.[maomao365.com] VALUES('/',30000,'总经理','CEO');
INSERT INTO dbo.[maomao365.com] VALUES('/1/',30001,'IT总监','CIO');
INSERT INTO dbo.[maomao365.com] VALUES('/2/',30002,'财务总监','CFO');
INSERT INTO dbo.[maomao365.com] VALUES('/1/1/',30003,'IT经理','IT_M');
INSERT INTO dbo.[maomao365.com] VALUES('/1/2/',30004,'经理','M');
INSERT INTO dbo.[maomao365.com] VALUES('/1/1/1/',30005,'员工','stuff');

--获取公司所有员工信息
SELECT * FROM dbo.[maomao365.com]

  
--获取所有用户信息及所属层级信息
SELECT *,idInfo.GetLevel() AS [层级] 
FROM [maomao365.com]

 

--查看指定员工的所有下属员工
DECLARE @allId hierarchyid
SELECT @allId=idInfo FROM [maomao365.com] WHERE userId=10000
SELECT *,idInfo.GetLevel() AS [层级] 
FROM [maomao365.com] WHERE idInfo.IsDescendantOf(@allId)=1

 

--查看 编号为30004及其所有上级
DECLARE @userId hierarchyid
SELECT @userId=idInfo FROM [maomao365.com] WHERE userId=30004
SELECT *,idInfo.GetLevel()AS [层级] FROM [maomao365.com] WHERE @userId.IsDescendantOf(idInfo)=1

 
go
truncate table [maomao365.com]
drop table [maomao365.com]


/*
与hierarchyid有关的一些函数主要有:

GetAncestor:取得某一个级别的顶级
GetDescendant:取得某一个级别的子代
GetLevel:取得级别
GetRoot:取得根
IsDescendantOf:判断某个节点是否为某个节点的子代
Parse:将字符串转换为hierarchyid格式,字符串需为”/1/”格式(斜杠开头和斜杠结尾)
Read:
Read将读取的二进制转换为 SqlHierarchyId对象值
不可使用cast 或convert函数转换
GetReparentedValue:移动节点
ToString:hierarchyid数据类型转换为字符串
Write:
将SqlHierarchyId 的二进制表示形式写出到传入的 BinaryWriter 中
*/