🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注

SQL Server 2000 中的数据类型介绍
为什么会有数据类型
数据库是一个庞大的数据载体,那么必然就会存储很多各式各样的数据, 那么这些数据也必然有着各式各样的类型对吧!
所以就衍生出了很多符合场景的数据类型, 让我们来指定!
前面我也说过, 数据类型选择也很重要, 不能乱选,要根据实际的情况和对应的数据进行选择
数据类型存在的意义
数据类型存在的意义主要有以下几种原因:
1.为了数据存储的需要
区分数据种类
数据类型用于区分不同类型的数据,比如: 文本、数字、日期等, 每种数据类型都有其特定的存储方式和格式,这有助于数据库系统本身能够更有效地存储和检索数据。
优化存储空间
不同的数据类型占用的存储空间是不一样的
比如说: 整数类型int通常比浮点数float占用更少的空间,而字符类型varchar的长度可以根据实际需要动态调整,从而避免不必要的空间浪费, 具体我们后面再说!
2.数据操作性和准确性
确保数据精度
对于我们在实际开发当中需要精确计算的数据, 比如: 价格、货币、科学计算中的浮点数等等,使用适当的数据类型可以确保数据的准确性和精度。
比如说: 使用DECIMAL或NUMERIC类型可以存储具有固定精度和小数位数的数值,避免浮点数计算中可能出现的舍入误差!
支持特定操作
不同的数据类型支持不同的操作!
比如,日期和时间类型支持日期和时间的加减、格式化等操作,而字符串类型varchar则支持字符串连接、搜索等操作, 这些细微的数据类型调整都可以在实际开发中起到重要作用!
3.数据一致性和安全性
数据一致性
数据类型还可以确保数据的一致性!
比如说: 在数据库中定义某个字段为整数类型之后,这个字段就只能存储整数,而无法插入非整数类型的数据信息,从而保证了数据的准确性和一致性
数据安全性
数据类型还可以在一定程度上提高数据的安全性, 例如通过限制数据类型和长度,我们可以防止恶意用户插入过大或不符合规范的数据信息到数据库中,从而保护数据库系统的稳定性和安全性
4.方便项目开发和数据库设计
方便实际编程开发
在实际开发过程中,使用数据类型可以简化代码编写, 为什么呢? 因为开发者可以根据数据类型选择适当的函数和方法来处理相应的数据,而无需担心数据类型不匹配的问题!
优化数据库设计
合理的选择数据类型也是可以优化数据库的结构和性能的,
举个栗子, 比如对于不需要存储大量文本数据的字段,可以选择使用较小的字符类型来减少存储空间, 这在一定程度上也算是小小的优化了一下!
那么接下来我们就来看看在SQL Server 2000中我们会常用到哪些数据类型!
SQL Server 常见数据类型
我们常见的数据类型主要分为以下几种类型:整数数据类型、浮点数据类型、日期和时间数据类型、字符串数据类型、二进制数据类型, 这些类型我们会根据使用场景的不同,而对应选择!
Number整数数据类型
Number数据类型在数据库系统中,有着举足轻重的地位, 它用于存储整数值。
在SQL Server 2000中,整数数据类型主要包括以下几种:
| 类型名称 | 存储大小 | 取值范围 | 描述 |
|---|---|---|---|
bigint |
8个字节(64位), 其中63位用于表示数值的大小,1位用于表示符号! | 从-263到263-1,即-9,223,372,036,854,775,808到9,223,372,036,854,775,807 | bigint是SQL Server中最大的整数类型,适用于需要存储超级大整数值的场景! |
int |
4个字节(32位)。其中31位用于表示数值的大小,1位用于表示符号 | 从-231到231-1,即-2,147,483,648到2,147,483,647 | int是SQL Server中最常用的整数类型,适用于大多数整数值的存储需求, 而且int的同义词就是integer |
smallint |
2个字节(16位)其中15位用于表示数值的大小,1位用于表示符号 | 从-215到215-1,即-32,768到32,767 | smallint适用于存储较小的整数值,当不需要使用int或bigint时,使用smallint可以节省存储空间! |
tinyint |
1个字节(8位)tinyint类型的数据全部用于表示数值的大小,没有符号位,因此只能表示正整数和零。 |
从0到255 | tinyint是SQL Server中最小的整数类型,用于存储非常小的整数值,如: 年龄、 |
| ... | ... | ... |
科普一下字节
在这个表中, n个字节(n位)这里说明的是二进制表示法,
要知道在计算机科学中,所有的数据(包括整数、浮点数、字符等)最终都是以二进制也就是0和1的组合形式存储在计算机的内存和磁盘上的! 这个懂的都懂!~~
而这里的n个字节指的是在内存中为该数据类型分配的空间量, 并且以字节(Byte)为单位!
学过计算机的朋友应该知道1个字节是由8个二进制位所组成,每个位由0或1组成, 而字节(Byte)是计算机科学技术中最小的可操作存储单位!
如图

而这里的n位用于表示数值的大小,1位用于表示符号位这一描述
也就是在解释这n个字节(即8×n位,因为1个字节=8位)是如何被用来存储整数的!
所以对于不同的整数数据类型, 它们所占用的字节数不同,所以可用于表示数值大小的位数也不同。
我们来测试一下效果这些数据类型的效果!
举个栗子
tinyint数据类型

前面说了tinyint类型的数据全部用于表示数值的大小,没有符号位,只能表示正整数和零
你去存储一个负数或者超过255的范围试试看试试 看会怎么样!
如图

整数类型应用场景
tinyint
存储大小:1字节
范围:0到255
特点:tinyint类型用于存储非常小的整数,适用于存储有限的数值集合,如年龄、产品分类ID等。
应用场景:在电商数据库中,可以用tinyint类型来存储商品的分类ID,因为分类ID通常不会太大。
smallint
存储大小:2字节
范围:-32,768到32,767
特点:smallint类型提供了比tinyint更大的存储范围,但仍然适用于存储较小的整数。
应用场景:在员工信息表中,可以用smallint类型来存储员工的部门ID, 因为部门数量通常不会太多
int
存储大小:4字节
范围:-2,147,483,648到2,147,483,647
特点:int类型是最常用的整数类型之一,它提供了足够的存储范围来满足大多数应用程序的需求。
应用场景:在订单表中,可以用int类型来存储订单ID,因为订单数量可能会非常大。
bigint
存储大小:8字节
范围:-9,223,372,036,854,775,808到9,223,372,036,854,775,807
特点:bigint类型提供了最大的整数存储范围,适用于需要存储超级大数值的场合。
应用场景:在大型财务系统中,可能需要用bigint类型来存储交易金额或账户余额,以确保不会因数值范围限制而出现问题。
bit
尽管bit类型在技术上不是整数类型,但它经常与整数类型一起讨论,因为它只能存储0或1。
特点:bit类型用于存储逻辑值 例如: 真/假、是/否、开/关等等!!
应用场景:在用户信息表中,可以用bit类型来存储用户的激活状态(激活为1,未激活为0)。
总的来说整数类型在数据库系统中用于存储整数值,不同的整数类型根据其存储大小和取值范围的不同,适用于不同的场景, 我们在选择整数类型时,应该根据实际开发的数据存储需求进行选择,以便于优化存储空间和提高效率,而不是乱选!
浮点数据类型
这个类型非常特别,也是我们开发中经常打交道的一种数据类型!
但是首先我们要明白一些浮点数据类型的基本概念!
所谓浮点数据类型也称之为浮点数,是一种在计算机中用于表示实数(包括整数和小数)的数据类型。
浮点数可以包含小数点,并且能够表示非常大或非常小的数值,但它们的表示精度是有限的。
浮点数据类型主要包括以下几种:
float(单精度浮点型)
占用4个字节(32位),可以存储大约6到7位有效数字。
double(双精度浮点型)
占用8个字节(64位),可以存储大约15位有效数字。与float类型相比,double类型提供了更高的精度和更大的范围
单精度和双精度的区别
单精度浮点型、双精度浮点型都是计算机中用于表示实数的数据类型,它们的主要区别在于存储的精度和范围不同!
单精度
单精度浮点型是计算机中用来存储较小范围和较低精度的实数的一种数据类型, 它占用4个字节(32位)的存储空间,可以表示大约6~7位有效数字的实数, 由于精度相对较低,它适用于不需要极高精度的计算场景!
一句话总结:单精度浮点型是存储较小范围和较低精度实数的数据类型,占用4字节
双精度
双精度浮点型是计算机中用来存储大范围和高精度的实数的一种数据类型, 它占用8个字节(64位)的存储空间,可以表示大约15位有效数字的实数, 与单精度浮点型相比,双精度浮点型在精度和范围上都有显著提升,适用于需要高精度计算的场景,例如: 科学计算、金融分析等
总之双精度浮点型是存储更大范围和更高精度实数的数据类型,占用8字节!
在SQL Server中,也确实区分单精度和双精度浮点类型, 这两种类型的主要区别在于它们的存储大小、精度以及能够表示的数值范围
在SQL Server中按照存储大小浮点类型如下:
单精度(REAL) 占用4个字节(32位)的存储空间。
双精度(FLOAT) 占用8个字节(64位)的存储空间。
浮点类型的存储方式
浮点数在计算机内部也是以二进制形式存储的,并且遵循IEEE 754标准
这个IEEE 754标准使用三个字段来表示一个浮点数 即 符号位(S)、指数位(E)尾数位(M),
这三个字段共同构成了一个浮点数的二进制表示
符号位用于表示浮点数的正负,0表示正数,1表示负数。
指数位用于表示浮点数的指数部分,其值决定了小数点的位置。
尾数位用于表示浮点数的尾数部分,即有效数字。
如图

但是这种存储方式有一个小缺点, 就是精度有限, 由于浮点数是以二进制形式存储的,因此某些十进制的小数无法精确表示为二进制小数,最后可能导致计算结果的舍入误差,以及无限小数循环的情况!
这里简单了解一下就行了,关于IEEE 754标准我会单独找时间出一期和大家讨论讨论!
SQL Server 2000 中的浮点数据类型
SQL Server 2000中,浮点数据类型主要用于存储带有小数部分的数值,这些数据类型在处理需要高精度的科学计算、金融数据等方面非常重要。
在SQL Server 2000中的浮点类型主要包括以下几种:
real类型
定义:REAL数据类型是一个单精度浮点数,用于存储较小的浮点数值。
精度:REAL类型的数据可以精确到小数点后第7位数字
范围:其数值范围从-3.40E+38到3.40E+38(其中E表示10的幂的意思)
存储大小:每个REAL类型的数据占用4个字节的存储空间。
应用场景:适用于对精度要求不是非常高,但需要节省存储空间的场合。
如图

例如

float类型
定义:FLOAT数据类型是一个双精度浮点数,用于存储较大的浮点数值
精度:FLOAT类型的数据可以精确到小数点后第15位数字
范围:其数值范围从-1.79E+308到1.79E+308。
存储大小:每个FLOAT类型的数据占用8个字节的存储空间。
使用场景:适用于需要大范围和高精度的浮点数值计算。
如图

如图

在选择使用float还是 real 时,我们应该结合实际开发需求的数值范围和精度来决定。对于大多数需要浮点数的应用场景,float 类型通常是更好的选择,因为它提供了更高的精度和更大的数值范围。
然而在存储大量浮点数值且对精度要求不高的场合,使用 real 类型可以节省存储空间。
decimal和numeric数据类型
在SQL Server中,decimal和numeric数据类型都可以用于存储具有固定精度和小数位数的数值。
这两种类型在功能上非常相似,以至于在SQL Server中它们通常被视为可以互换使用, 所以在SQL Server中,一定程度上decimal和numeric在功能上是等价的!
decimal和numeric数据类型的定义
用途:用于存储具有小数点且需要精确表示的数值
语法:decimal(p, s) 或 numeric(p, s),其中p是精度也就是数字的总位数,s是小数位数, 他们彼此的占用空间随精度变化而变化。
精度和小数位数必须遵守规则:0 <= s <= p <= 38
特点
精确性
与float和real这样的浮点数据类型不同,decimal和numeric能够存储精确的数值, 最大化减少误差!
范围
可以存储非常大或非常小的数值,具体取决于指定的精度和小数位数。
最大精度为38位数字,其中最多可以有30位小数
存储大小
根据指定的精度和小数位数,decimal和numeric数据类型的存储大小会有所不同。
一般来说在SQL Server中它们会占用从5~17个字节的存储空间!
如图

如图

numeric效果差不多,这里就不再过多赘述了!
smallmoney和money货币数据类型
在我们的数字数据类型中,还包含两种类型,叫货币类型!
说到货币,肯定你会想到一个词汇money🤑🤑, 没错, SQL Server 2000中还真有这个类型, 专门用来存储钱或者说存储货币数值的数据类型! 💰💰
它们在处理金融数据时特别有用,因为它们提供了高精度的货币值表示,避免了浮点数可能带来的精度问题!
money类型
如下表
| 类型名称 | 存储大小 | 取值范围 | 描述 |
|---|---|---|---|
money |
这种类型占用8个字节的存储空间 |
最大值为922,337,203,685,477.5807 最小值为-922,337,203,685,477.5808 精度为四位小数 |
在SQL Server中是一种固定精度和小数位数的数据类型,专门用于存储货币值的数据类型 |
| ... | ... |
应用场景
money类型特别适用于需要高精度的货币计算的应用场景,例如:商城系统、财务系统、电子商务平台、银行系统等都可以使用这种类型存储货币值!
因为使用money类型可以一定程度上确保货币数值在数据库中的存储和处理是精确的,避免了浮点数可能带来的精度问题!
我们可以在创建表或修改表结构的时候,指定某字段为money类型,以存储货币值,
如图

效果如下

smallmoney类型
如下表:
| 类型名称 | 存储大小 | 取值范围 | 描述 |
|---|---|---|---|
smallmoney |
占用4个字节的存储空间 |
最大值为214,748.3647 最小值为-214,748.3648 同样具有四位小数的精度 |
它是money类型的一种缩小版,用于存储较小范围的货币值,比money类型节省了一半的空间。 |
| ... | ... | ... | ... |
应用场景
smallmoney类型适用于存储金额范围较小的货币值,例如在某些小型应用程序或特定业务场景中
类似于小型零售店或咖啡馆在记录日常销售收入时,由于每笔交易金额通常不会太大,使用smallmoney类型基本上就足以满足需求,这样既节省存储空间又能保证货币值的精确表示!
所以说在使用money和smallmoney类型的时候,我们应该注意它们的存储范围和精度,针对性的来确保满足业务需求
如图


注意
money和smallmoney类型可能会在某些数据库系统中存在兼容性问题,这时候我们就需要使用其他数据类型, 例如decimal或numeric来实现类似的功能!


"👍点赞" "✍️评论" "收藏❤️"
大家的支持就是我坚持下去的动力!
如果以上内容有任何错误或者不准确的地方,🤗🤗🤗欢迎在下面 👇👇👇 留个言指出、或者你有更好的想法,
欢迎一起交流学习❤️❤️💛💛💚💚

更多 好玩 好用 好看的干货教程可以 点击下方 关注❤️ 微信公众号 ❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇

