熟悉SQL Server 数据类型
SQL Server中包含了4种不同的数据类型,一 数字型,二 日期与时间, 三 字符串, 四 其他
上述4个大类中,每一类包含一定数量的子类。 表中的每一列,被声明的变量,参数等,都必须有与之相对应的数据类型。
数据库的完整性很大程度上取次于数据类型是否进行了正确设置。因此不应该总是依赖于应用程序来强制使用某种数据类型。
一 数字型
数字型(Numeric)数据类型有两个子类:精通数字于近似数字。精通数字类型对应有限范围内的数值。
精确数字类型
数据类型 | 范围 | 存储 |
bigint | -2^63(-9 233 372 036 854 775 808)到2^63-1(9 233 372 036 854 775 808) | 8字节 |
int | -2^31(-2 147 483 648)到2^31-1(2 147 483 648) | 4字节 |
smallint | -2^15(-32 768)到2^15-1(-32 768) | 2字节 |
tinyint | 0到256 | 1字节 |
money | -922 337 203 685 477.580 8到 922 337 203 685 477.580 7 | 8字节 |
smallmoney | -214 748.364 8 到 214 748.364 7 | 4字节 |
如果表里的弄列的值仅介于1到10之间,则应该使用tinyint类型
除了表中列出的几个子类外,精确数字类型还包括另外两种数据类型:decimal和numeric,
两者在小数位数于精确上有细微的区别
如果想存储一个精度为4的数字,小数点的左右两边各有2位,则需要使用的数据类型为decimal(4,2);
近似数字子类类似于decimal和numeric型,还有一种精度值,即浮点型(float);
decimal和float数据类型间主要的区别在于:前者存储的精度级别更高。
二 字符串型
字符串型包含三个子类:字符串,Unicode字符串以及二进制字符串。三者各自均包含固定长度,可变长度以及在新版本中被删除的字符串这三种类型
注意: n用于定义字符串长度。对可变的长度字符串而言,n表示该字符串最大可存储的固定长度,
极限存储大小为2^31-1个字节(2GB))。
字符串型子类用于存储非Unicode型数据。该子类包含的三种数据类型如下:
* char(n):固定长度,长度为1~8000。
* varchar(n):可变长度,最大可存储2^31-1个字节(2GB)。
* text:该类型已被删除,取而代之的是varchar(max)型。
Unicode字符串子类,可以存储Unicode型,也可以存储非Unicode型数据。该子类中的三种数据类型如下:
* nchar(n):固定长度的Unicode字符串数据。长度为1~4000.
* nvarchar(n):可变长度的Unicode字符串数据。最大长度存储大小是2^31-1个字节(2GB).
* ntext:该类型已被删除,取而代之的是varchar(max)型。
二进制字符串子类存储的是二进制数据。该子类中的三种数据类型如下:
* binary(n):长度为n字节的固定长度二进制数据,其中n为1~8000。
* varbinary(n):可变长度的二进制数据。最大长度存储大小是2^31-1个字节(2GB).
* image:该类型已被删除,取而代之的是carbinary(max)型。
建议作为一种最佳实践, 建议: 当需要存储固定长度的值时选用 char,nchar,binary等类型;如果值的长度不变,则使用varchar, nvarchar,varbinary等类型。
三 日期于时间类型
日期于时间数据类型被广泛应用于SQL Server数据库中。该类型提供了多种方式可方便地存储日期与时间值。
目前SQL Server中共有6种日期与时间型数据库类型。
* time(n):定义一天中的某个时间。这个不能感知时区,基于24小时制。 n表示秒的小数部分n的取值从0到7。
* date:用于存储日期值,取值范围为01-01-01 到 12-31-9999
* smalldatetime:用于存储日期与时间值。其中日期部分的取值介于 1/1/1900到6/6/2079之间,
而时间部分则精确到秒。 如 4/1/2017 13:15:04之类
* datetime:该类型类似于smalldatetime但日期的取值范围更广,时间的精度更高。可存储的日期范围与date相同
可以使用这个数据类型来存储如 4/1/2017 13:20:888之类的值
* datetime2(n):该类型与datetime型相似。还多了n的作用,更精确范围更大
* datetimeffset:该类型包含了 datetime2全部功能,不仅如此还支持时区信息。该特点使得这种类型区别于date
与time数据类型。我们可以再此类中存储带时区偏移量的日期与时间数值, 如 4/1/2017 13:37:24-06:00。
四 其他数据类型
除了上述几种外,SQL Server中还提供了其他数据类型
数据类型 | 简介 |
cuesor | 用于递归与迭代过程的数据库临时备份。这是唯一一种不能被用于表中的数据类型。 |
rowversion(timestamp) | 该类型自动生成一个8字节的值,rowversion取代了timestamp数据类型。该类型的典型用途为检测数据的更改 |
hierarchyid | 是一种表示位置的数据类型。可使用hierarchyid表示数据在层次结构中的位置。 |
sql_variant |
该类型可以称得上是数据类型中的变色龙。它可以存储SQL Server支持的各种数据类型的值。在执行针对该类型的任何操作之前,必须先将它转化为对应的数据类型的值。例如:如果希望完成加法操作,则必须先把它转换为int之类的数据类型,才能完成接下来的加法操作。 |
xml | 存储xml数据的数据类型。可以在列中或者xml类型的变量中存储xml实例。 |
空间数据 | SQL Server 支持两种空间数据类型:GEOGRAPHY 和GEOMETRY。GEOGRAPHY类型表示圆形地球坐标系中的数据。而GEOMETRY则表示欧几里得(平面)坐标系中得数据,入点,线以及其他得地理特征 |
filestream | 借助FILESTREAM,基于SQL Server的应用程序可以将非结构化的数据(入文档和图像)存储在文件系统中。FILESTREAM将varbinary(max)二进制大型对象(BLOB)数据作为文件存储在NTFSW文件系统中 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言