sqlserver主要数据类型数据范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver主要数据类型数据范围相关的知识,希望对你有一定的参考价值。

整数型

 

 

Bigint

范围为-263(-9223372036854775808)~263-1(9223372036854775807),其精度为19,小数位数为0,长度为8字节。

int

范围为-231(-2,147,483,648)~231-1(2,147,483,647),其精度为10,小数位数为0,长度为4字节。

smallint

范围为-215(-32768)~215-1(32767),其精度为5,小数位数为0,长度为2字节。

tinyint

范围为0~255,长度为1字节,其精度为3,小数位数为0,长度为1字节。

 

精确整数型

整数+小数,所有数字都是有效位,包括decimal和numeric两类,两者的唯一区别在于decimal不能用于带有identity关键字的列。声明精确整数型数据的格式是numeric|decimal(p[,s]),其中p为精度,s为小数位数,s的缺省值为0。

decimal和numeric可存储从-1038+1到1038–1的固定精度和小数位的数字数据,它们的存储长度随精度变化而变化,最少为5字节,最多为17字节。
l精度为1~9时,存储字节长度为5;
l精度为10~19时,存储字节长度为9;
l精度为20~28时,存储字节长度为13;
l精度为29~38时,存储字节长度为17。

近似数值型

real:使用4字节存储数据,表数范围为-3.40E+38到3.40E+38,数据精度为7位有效数字。
float:定义中的n取值范围是1~53,用于指示其精度和存储大小。

当n在1~24之间时,实际上是定义了一个real型数据,存储长度为4字节,精度为7位有效数字;当n在25~53之间时,存储长度为8字节,精度为15位有效数字。

当缺省n时,代表n在25~53之间。float型数据的数范围为-1.79E+308到1.79E+308。

货币型

Money:数据的数范围为-263(-922337203685477.5808)~263-1(922337203685477.5807),其精度为19,小数位数为4,长度为8字节。money的数的范围与bigint相同,不同的只是money型有4位小数,实际上,money就是按照整数进行运算的,只是将小数点固定在末4位。

Smallmoney:数范围为–231(-2,147,48.3648)~231-1(2,147,48.3647),其精度为10,小数位数为4,长度为4字节。可见smallmoney与int的关系就如同money与bigint的关系。

 

当向表中插入money或smallmoney类型的值时,必须在数据前面加上货币表示符号($),并且数据中间不能有逗号(,);若货币值为负数,需要在符号$的后面加上负号(-)。例如:$15000.32,$680,$-20000.9088都是正确的货币数据表示形式。

位型

SQLServer中的位(bit)型数据相当于其他语言中的逻辑型数据,它只存储0和1,长度为一个字节。但要注意,SQLServer对表中bit类型列的存储作了优化:如果一个表中有不多于8个的bit列,这些列将作为一个字节存储,如果表中有9到16个bit列,这些列将作为两个字节存储,更多列的情况依此类推。
当为bit类型数据赋0时,其值为0,而赋非0(如100)时,其值为1。
若表中某列为bit类型数据,那么该列不允许为空值(有关空值概念本节稍后即做介绍),并且不允许对其建立索引。

字符型

char[(n)]
定长字符数据类型,其中n定义字符型数据的长度,n在1到8000之间,缺省为1。当表中的列定义为char(n)类型时,若实际要存储的串长度不足n时,则在串的尾部添加空格以达到长度n,所以char(n)的长度为n。例如某列的数据类型为char(20),而输入的字符串为”ahjm1922”,则存储的是字符ahjm1922和12个空格。若输入的字符个数超出了n,则超出的部分被截断。

varchar[(n)]
变长字符数据类型,其中n的规定与定长字符型char中n完全相同,但这里n表示的是字符串可达到的最大长度。varchar(n)的长度为输入的字符串的实际字符个数,而不一定是n。例如,表中某列的数据类型为varchar(100),而输入的字符串为”ahjm1922”,则存储的就是字符ahjm1922,其长度为8字节。

Unicode字符型

Unicode是“统一字符编码标准”,用于支持国际上非英语语种的字符数据的存储和处理。

nchar是固定长度Unicode数据的数据类型

nvarchar是可变长度Unicode数据的数据类型,二者均使用UNICODEUCS-2字符集。
lnchar[(n)]:nchar[(n)]为包含n个字符的固定长度Unicode字符型数据,n的值在1与4,000之间,缺省为1。长度为2n字节。若输入的字符串长度不足n,将以空白字符补足。
lnvarchar[(n)]:nvarchar[(n)]为最多包含n个字符的可变长度Unicode字符型数据,n的值在1与4,000之间,缺省为1。长度是所输入字符个数的两倍。
实际上,nchar、nvarchar与char、varchar的使用非常相似,只是字符集不同(前者使用Unicode字符集,后者使用ASCII字符集)。

文本型
当需要存储大量的字符数据,此时可使用文本型数据。
文本型包括text和ntext两类,分别对应ASCII字符和Unicode字符。text类型可以表示最大长度为231-1(2,147,483,647)个字符,其数据的存储长度为实际字符数个字节。ntext可表示最大长度为230-1(1,073,741,823)个Unicode字符,其数据的存储长度是实际字符个数的两倍(以字节为单位)。二进制型
二进制数据类型表示的是位数据流,

binary[(n)]:固定长度的n个字节二进制数据。n取值范围为1到8,000,缺省为1。binary(n)数据的存储长度为n+4字节。若输入的数据长度小于n,则不足部分用0填充;若输入的数据长度大于n,则多余部分被截断。
输入二进制值时,在数据前面要加上0x,可以用的数字符号为0—9、A—F(字母大小写均可)。因此,二进制数据有时也被称为十六进制数据。例如0xFF、0x12A0分别表示值FF和12A0。因为每字节的数最大为FF,故在“0x”格式的数据每两位占1个字节。
varbinary[(n)]:n个字节变长二进制数据。n取值范围为1到8,000,缺省为1。varbinary(n)数据的存储长度为实际输入数据长度+4个字节。

日期时间类型
日期时间类型数据用于存储日期和时间信息,包括datetime和smalldatetime两类。
datetime:datetime类型可表示的日期范围从1753年1月1日到9999年12月31日的日期和时间数据,精确度为百分之三秒(3.33毫秒或0.00333秒),例如1到3毫秒的值都表示为0毫秒,4到6毫秒的值都表示为4毫秒。
datetime类型数据长度为8字节,日期和时间分别使用4个字节存储。前4字节用于存储datetime类型数据中距1900年1月1日的天数,为正数表示日期在1900年1月1日之后,为负数则表示日期在1900年1月1日之前。后4个字节用于存储datetime类型数据中距12:00(24小时制)的毫秒数。
用户以字符串形式输入datetime类型数据,系统也以字符串形式输出datetime类型数据,将用户输入到系统以及系统输出的datetime类型数据的字符串形式称为datetime类型数据的“外部形式”,而将datetime在系统内的存储形式称为“内部形式”,SQLServer负责datetime类型数据的两种表现形式之间的转换,包括合法性检查。
用户给出datetime类型数据值时,日期部分和时间部分分别给出。

 

以上是关于sqlserver主要数据类型数据范围的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中有类似merge into这种函数吗

SqlServer基础复习

java数据类型,取值范围,引用类型解析

Mysql支持的数据类型都有哪些

Mysql数据类型之整数型的一些细节你get到了吗?

MySQL数据类型优化—整数类型优化选择