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 相关文章推荐
sqlserver2017共享功能目录路径不可改的解决方法
Apr 16 SQL Server
SqlServer 垂直分表(减少程序改动)
Apr 16 SQL Server
SQL Server中交叉联接的用法详解
Apr 22 SQL Server
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
Jun 30 SQL Server
数据库之SQL技巧整理案例
Jul 07 SQL Server
SQL语句中JOIN的用法场景分析
Jul 25 SQL Server
SQL SERVER实现连接与合并查询
Feb 24 SQL Server
SQL SERVER触发器详解
Feb 24 SQL Server
sql server 累计求和实现代码
Feb 28 SQL Server
SQL Server使用T-SQL语句批处理
May 20 SQL Server
SQL Server删除表中的重复数据
May 25 SQL Server
SQL Server携程核心系统无感迁移到MySQL实战
Jun 01 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
一个PHP模板,主要想体现一下思路
2006/12/25 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
浅析node.js中close事件
2014/11/26 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
教师节促销活动方案
2014/02/14 职场文书
3分钟演讲稿
2014/04/30 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
医院保洁服务方案
2014/06/11 职场文书
公司介绍信范文
2015/01/31 职场文书
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
PO模式在selenium自动化测试框架的优势
2022/03/20 Python