Sql Server之数据类型详解


Posted in SQL Server onFebruary 28, 2022

Character 字符串:

数据类型 描述 存储
char(n) 固定长度的字符串。最多 8,000 个字符。 n
varchar(n) 可变长度的字符串。最多 8,000 个字符。  
varchar(max) 可变长度的字符串。最多 1,073,741,824 个字符。  
text 可变长度的字符串。最多 2GB 字符数据。  

Unicode 字符串:

数据类型 描述 存储
nchar(n) 固定长度的 Unicode 数据。最多 4,000 个字符。  
nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符。  
nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。  
ntext 可变长度的 Unicode 数据。最多 2GB 字符数据。  

Binary 类型:

数据类型 描述 存储
bit 允许 0、1 或 NULL  
binary(n) 固定长度的二进制数据。最多 8,000 字节。  
varbinary(n) 可变长度的二进制数据。最多 8,000 字节。  
varbinary(max) 可变长度的二进制数据。最多 2GB 字节。  
image 可变长度的二进制数据。最多 2GB。  

Number 类型:

数据类型 描述 存储
tinyint 允许从 0 到 255 的所有数字。 1 字节
smallint 允许从 -32,768 到 32,767 的所有数字。 2 字节
int 允许从 -2,147,483,648 到 2,147,483,647 的所有数字。 4 字节
bigint 允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 8 字节
decimal(p,s)

固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节
numeric(p,s)

固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节
smallmoney 介于 -214,748.3648 和 214,748.3647 之间的货币数据。 4 字节
money 介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。 8 字节
float(n) 从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。 参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。 4 或 8 字节
real 从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。 4 字节

Date 类型:

数据类型 描述 存储
datetime 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 8 bytes
datetime2 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。 6-8 bytes
smalldatetime 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 4 bytes
date 仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 3 bytes
time 仅存储时间。精度为 100 纳秒。 3-5 bytes
datetimeoffset 与 datetime2 相同,外加时区偏移。 8-10 bytes
timestamp 存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。  

其他数据类型:

数据类型 描述
sql_variant 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。
uniqueidentifier 存储全局标识符 (GUID)。
xml 存储 XML 格式化数据。最多 2GB。
cursor 存储对用于数据库操作的指针的引用。
table 存储结果集,供稍后处理。
  • 定长或变长
    所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空间是变长的,比如varchar,nvarchar变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。
  • Unicode或非Unicode
    数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。
  • 基于以上两点来看看字段容量
    char,varchar 最多8000个英文,4000个汉字
    nchar,nvarchar 可存储4000个字符,无论英文还是汉字
  • 使用
    如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char 能确定长度又不一定是ansi字符或者,那么用nchar; 
    对于超大数据,如文章内容,使用nText 
    其他的通用nvarchar

char、varchar、nchar、nvarchar特点比较

  • CHARCHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
  • VARCHAR存储变长数据,但存储效率没有CHAR高,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。

从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

  • TEXT
    text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
  • NCHARNVARCHARNTEXT这三种从名字上看比前面三种多了个"N"。和charvarchar比较起来,ncharnvarchar最多存储4000个字符,不论是英文还是汉字;而charvarchar最多能存储8000个英文,4000个汉字。可以看出使用ncharnvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。

 到此这篇关于Sql Server之数据类型详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

SQL Server 相关文章推荐
SQL Server基本使用和简单的CRUD操作
Apr 05 SQL Server
SqlServer: 如何更改表的文件组?(进而改变存储位置)
Apr 05 SQL Server
SQL Server连接查询的实用教程
Apr 07 SQL Server
SQL 窗口函数实现高效分页查询的案例分析
May 21 SQL Server
SQL Server代理:理解SQL代理错误日志处理方法
Jun 30 SQL Server
数据库之SQL技巧整理案例
Jul 07 SQL Server
SQLServer RANK() 排名函数的使用
Mar 23 SQL Server
SQL Server中使用表变量和临时表
May 20 SQL Server
SQL Server使用PIVOT与unPIVOT实现行列转换
May 25 SQL Server
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
May 25 SQL Server
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
May 25 SQL Server
SQL Server2019安装的详细步骤实战记录(亲测可用)
Jun 10 SQL Server
sql server 累计求和实现代码
Feb 28 #SQL Server
SQL SERVER触发器详解
Feb 24 #SQL Server
SQL SERVER存储过程用法详解
Feb 24 #SQL Server
SQL SERVER实现连接与合并查询
Feb 24 #SQL Server
SQLServer中exists和except用法介绍
SQL Server2019数据库备份与还原脚本,数据库可批量备份
SQL中的三种去重方法小结
Nov 01 #SQL Server
You might like
php实现图片压缩处理
2020/09/09 PHP
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
Python合并多个Excel数据的方法
2018/07/16 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
音乐专业自荐信
2014/02/07 职场文书
一体化教学实施方案
2014/05/10 职场文书
幼师求职信
2014/06/23 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
2016年清明节寄语
2015/12/04 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
导游词之日本富士山
2020/01/06 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis