关于T_SQL中声明变量类型的基础知识。
一.总结常见存储数据类型,看的更清楚一点。
四种整形
- tinyint 最小整形数 占用一个字节 无符号范围 0到255 有符号范围 -126到125
- smallint 小整形数 占用两个字节 无符号范围 0到2^16=65535 有符号范围 -2^15到2^15-1
- int 整 形 数 占用四个字节 无符号范围 0到2^32 =4294967295 有符号范围 -2^31到2^31-1
- bigint 长整形数 占用八个字节 无符号范围 0到2^64 =18446744073709551615 有符号范围-2^61到2^61-1
这些整形和C#中对应的分别是 int16 int32 int64 , 个人觉得没必要去记具体数据大小,只要记住数字位数和第一个数据大小就行了。
小数类型(存储十进制小数)
实型数据是以指数形式存在于内存中,在内存中存储分为三部分。
- 符号位(Sign) : 0代表正,1代表为负
- 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
- 尾数部分(Mantissa):尾数部分
4个字节 32位 | 符号位 1bit | 尾数部分 23bit | 指数部分8bit |
8个字节 64位 | 符号位 1bit | 尾数部分52bit | 指数位11bit |
Real指数的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;float的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
Real:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
float:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位
(浮点)数值 = 尾数x底数^指数,(附加正负号)
- Real 浮点型数 占用4个字节 有效数字为6~7位,取决于有无符号。
- float 浮点数类型 占用8个字节 有效位位15~16位(数据类型针对T_Sql)。
-
Numeric和Decimal一样。可以用2-17个字节来存储 ,decimal(15,5)表示:共15位,其中整数10位,小数5位
四种字符数据类型:
- char(n) n表示字符所占的存储空间,固定长度 每个字符或符号占一个字节的存储空间。若不制定n,那么系统默认为1,最大长度为8000 ANSI字符
- nchar(n) Unicode字符每个字符占两个字节的存储空间,保存固定长度的Unicode字符。NCHAR列中字符的个数最多为4000。
- varchar(n) 表示单字节的字符可变长度的字符串(0<n<=8000),每个字符或符号占一个字节的存储空间,VARCHAR数据值能够在它的实际长度中保存。 ANSI字符
- nvarchar(n) Unicode字符每个字符占两个字节的存储空间,保存可变长度的Unicode字符。nvarchar列中字符的个数最多为4000。
日期和时间数据类型:
- DateTime: 可以精确到毫秒,占8个字节
- SmallDateTime: 精确到分钟,占4个字节
- Date: 只存储日期部分,不包括时间 Date数据类型用3个字节的保存并且范围为01/01/0001至12/31/9999(英文日期是反的)
- Time: 只存储时间部分,不包括日期 TIME数据类型用3-5个字节保存,且精确到100ns。1纳秒 =100000秒
-
DateTime2: 类似于之前的datetime类型,不过其精度比较高,可以精确到小数点后面7位(100ns)
-
DateTimeOffSet: 加入了时区偏移量部分
货币数据类型(需要在数据前加上货币符号):
- Money有4位小数,占8个字节
- SmallMoney: 范围比Money小,占4个字节
二进制数据类型
Binary: 前面加0X作为二进制标识,例如“0Xabc” 定义形式:Binary(n),n=1-8000 n+4个字节
Var Binary: 具有变动长度的特性