SQL Server 数据类型

文章目录

  • 一、文本类型(字母、符号或数字字符的组合)
  • 二、整数类型
  • 三、精确数字类型
  • 四、近似数字(浮点)类型
  • 五、日期类型
  • 六、货币类型
  • 七、位类型
  • 八、二进制类型

一、文本类型(字母、符号或数字字符的组合)

在这里插入图片描述

在SQL Server中,用来存储文本数据的数据类型主要有以下几种:
首先注意两点:
//
(1).Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案,是一个国际标准,用于计算机系统中文本的表示和处理。
以下是关于Unicode的一些关键点:

  1. 编码范围
    Unicode为每一个字符和符号从U+0000到U+10FFFF的范围内分配了一个唯一的代码点(Code Point)。

  2. 通用性
    Unicode设计的初衷是能够表示全世界所有的书写系统,包括现代文字、历史文字、技术符号、表情符号等。

  3. 编码方案
    Unicode定义了几种不同的编码方案来存储这些代码点,例如UTF-8、UTF-16和UTF-32。UTF-8是一种变长编码,它可以使用1到4个字节来表示一个字符,适用于网络传输和文本文件存储。UTF-16和UTF-32分别使用2个或4个字节来固定长度表示字符。

  4. 与ASCII兼容
    Unicode在设计时考虑到了与ASCII编码的兼容性。例如,Unicode中前128个字符的编码与ASCII完全一致。

  5. 跨平台
    Unicode被广泛支持和使用在各种操作系统、程序语言和应用中,使得跨语言、跨平台的文本处理变得可能。

使用Unicode数据类型可以确保数据库可以存储多种语言的字符,无论是拉丁字母、西里尔字母、汉字、日文假名、韩文字符还是其他任何复杂的文字系统。这对于国际化应用程序尤其重要。

(2):带n的数据类型长度是不带n的两倍。
//

  1. charnchar

    • char:固定长度的非Unicode字符数据,最多可以存储8000个字符。
    • nchar:固定长度的Unicode字符数据,最多可以存储4000个字符。
  2. varcharnvarchar

    • varchar:可变长度的非Unicode字符数据,最多可以存储8000个字符。
    • nvarchar:可变长度的Unicode字符数据,最多可以存储4000个字符。
  3. textntext

    • text:非Unicode数据,最多可以存储2^31-1 (2,147,483,647)个字符。
    • ntext:Unicode数据,最多可以存储1,073,741,823个字符。这些类型现在被视为遗留的,在最新版本的SQL Server中,官方建议使用VARCHAR(MAX)NVARCHAR(MAX)代替。
  4. varchar(MAX)nvarchar(MAX)

    • varchar(MAX):可变长度的非Unicode数据,最多可以存储2^31-1个字节。
    • nvarchar(MAX):可变长度的Unicode数据,最多可以存储2^31-1个字节。

需要注意的是:

  • CHARNCHAR存储固定长度的数据,当存储的文本短于指定长度时,会用空格填充至固定长度。
  • VARCHARNVARCHAR存储可变长度的数据,只占用实际文本长度所需的空间。它们更加灵活,适用于文本长度不确定的场景。
  • 使用NVARCHARNCHAR类型可以存储Unicode字符,适合多语言环境,但是它们占用的存储空间是VARCHARCHAR的两倍。
  • TEXTNTEXT类型在新版SQL Server中已被弃用,不建议使用。应使用VARCHAR(MAX)NVARCHAR(MAX)代替,因为这些大型值数据类型提供了更好的性能和更多的功能。
  • VARCHAR(MAX)NVARCHAR(MAX)允许你存储大量数据,但要注意它们可能会影响性能,特别是在执行大量文本操作时。
  • 使用大型值数据类型时,如果可能,考虑使用文本/字符串数据存储和检索技术,例如全文索引。

二、整数类型

在SQL Server中,用于存储整数的数据类型包括以下几种:

  1. tinyint

    • 存储范围:0 到 255
    • 存储大小:1 字节
  2. smallint

    • 存储范围:-32,768 到 32,767
    • 存储大小:2 字节
  3. int

    • 存储范围:-2,147,483,648 到 2,147,483,647
    • 存储大小:4 字节
  4. bigint

    • 存储范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
    • 存储大小:8 字节

在选择适合的整数类型时,需要注意以下几点:

  • 存储要求:选择一个与我们期望存储值的范围相匹配的数据类型,可以节省存储空间。例如,当我们知道一个列永远不会超过255,那么使用tinyint会比使用INT更节省空间。

  • 性能:一般来说,较小的数据类型(如tintintsmallint)可以提供更好的性能,因为它们使用的内存更少,索引也更紧凑。

  • 溢出:要小心确保所选的数据类型不会因为值太大而溢出。一旦发生溢出,可能会得到错误或不正确的结果。

  • 自动增长:如果在设计如主键列时使用自动增长(IDENTITY)属性,确保数据类型足够大,以防在长时间运行后达到最大值。

  • 应用兼容性:有时客户端应用程序的数据类型可能会限制在SQL Server中使用的数据类型。确保选择的数据类型与客户端应用程序兼容。

  • 标准化:在进行数据库设计时,应考虑数据的标准化形式。相同的数据类型可以使得后期数据维护、比较和索引更加高效。

三、精确数字类型

在SQL Server中,精确数字类型指的是能够存储精确数值的数据类型,通常用于需要精确计算的财务和数学运算。以下是SQL Server中的精确数字类型:

  1. bit

    • 存储范围:0 或 1
    • 存储大小:1、2、4、8字节,取决于列中的比特数(1-8、9-16、17-32、33-64)
  2. decimalnumeric(这两种类型在SQL Server中是同义的):

    • 存储范围:-10^38 +1 到 10^38 -1
    • 存储大小:5-17 字节,取决于指定的精度(总位数)
    • 可以指定小数点左侧和右侧的精度,即精度(数字总位数)和小数位数(小数点后的位数)。
  3. moneysmallmoney

    • money:-922,337,203,685,477.5808 到 922,337,203,685,477.5807,存储大小为 8 字节
    • smallmoney:-214,748.3648 到 214,748.3647,存储大小为 4 字节

要注意:

  • 选择合适的大小:根据需要存储的数据的大小和精度选择合适的数据类型。例如,如果不需要很大或很精确的数值,使用INTSMALLINT可能比BIGINTDECIMAL更合适。

  • 注意DECIMALNUMERIC的精度和小数位数:DECIMALNUMERIC数据类型允许指定精度和小数位数,这对于保持数值计算的准确性非常重要。选择合适的精度可以确保数据的准确性,同时避免不必要的存储浪费。

  • MONEYSMALLMONEY类型特别适用于存储货币值,但它们的计算精度可能不如DECIMALNUMERIC。当涉及到非常精确的财务计算时,通常建议使用DECIMALNUMERIC

  • 考虑性能:更大的数据类型(如BIGINTDECIMAL)可能会导致性能略微下降,因为它们需要更多的存储空间和计算资源。在不牺牲必要精度的情况下,选择最小的数据类型可以提高性能。

四、近似数字(浮点)类型

在SQL Server中,近似数字(浮点)类型主要是指能够存储近似数值的数据类型,用于科学计数和那些不要求精确小数值的情况。SQL Server提供了两种浮点数据类型:

  1. float[(n)]

    • 存储范围:由-1.79E+308到-2.23E-308,0以及从2.23E-308到1.79E+308。
    • 存储大小:4或8字节,具体取决于n的值。如果n的值是24到53,存储大小是8字节。如果n的值是1到23,存储大小是4字节。
  2. real

    • 存储范围:由-3.40E+38到-1.18E-38,0以及从1.18E-38到3.40E+38。
    • 存储大小:4字节。

在使用这些近似数字类型时,需要注意以下几点:

  • 存储大小和精度float类型可以指定精度n(有效位数)。如果指定了1到24之间的n值,将使用4字节存储(REAL类型相似)。如果指定了25到53之间的n值,将使用8字节存储。不指定n时,默认为53(即float(53))。

  • 舍入错误:由于舍入错误,floatreal类型可能无法精确表示非常大或非常小的数值。在比较这些类型的值时,可能需要使用一定的容差。

  • 性能:浮点运算通常比整数运算慢,但floatreal类型可以存储极宽的数值范围,对于某些应用而言这是必要的(如科学计算)。

  • 运算结果:浮点数的数学运算可能会产生不稳定的结果,因此在执行数学运算时,结果可能会略有不同,这是由于二进制浮点数在内部是如何表示和计算的。

  • 数据转换:将floatreal类型转换成整数类型时,SQL Server会将数值四舍五入到最近的整数。

  • 移植性:由于不同的系统可能会使用不同的方法来实现浮点数的舍入,所以在不同的系统之间迁移数据时,涉及到FLOATREAL类型的数据可能会导致不一致。

五、日期类型

在SQL Server中,日期和时间数据类型用于存储日期和时间值。以下是SQL Server中的日期和时间数据类型:

  1. data

    • 存储范围:0001-01-01 到 9999-12-31
    • 存储大小:3字节
    • 仅包含日期部分,没有时间部分。
  2. time

    • 存储范围:00:00:00.0000000 到 23:59:59.9999999
    • 存储大小:3到5字节,具体取决于秒的精度。
    • 仅包含时间部分,没有日期部分。
  3. datatime

    • 存储范围:1753-01-01 到 9999-12-31
    • 存储大小:8字节
    • 包括日期和时间,精度为3.33毫秒。
  4. smalldatatime

    • 存储范围:1900-01-01 到 2079-06-06
    • 存储大小:4字节
    • 包括日期和时间,精度为1分钟。
  5. datatime2

    • 存储范围:0001-01-01 到 9999-12-31
    • 存储大小:6到8字节,具体取决于秒的精度。
    • DATETIME类似,但更大的日期范围和可定制的精度。
  6. datatimeoffset

    • 存储范围:0001-01-01 到 9999-12-31
    • 存储大小:8到10字节,具体取决于秒的精度。
    • 包括日期和时间,以及相对于UTC的时区偏移。

在使用这些日期和时间类型时,需要注意以下几点:

  • 时区:如果需要考虑时区信息,使用DATETIMEOFFSET可以存储时区偏移量。

  • 默认值:当没有提供时间部分时,TIME的默认值为00:00:00。对于日期部分,默认值是1900-01-01。

六、货币类型

在SQL Server中,专门用于存储货币值的数据类型主要有两种:

  1. money

    • 存储范围:-922,337,203,685,477.5808 到 922,337,203,685,477.5807
    • 存储大小:8 字节
    • 精度:小数点后四位
  2. smallmoney

    • 存储范围:-214,748.3648 到 214,748.3647
    • 存储大小:4 字节
    • 精度:小数点后四位

使用这些货币类型时,以下是一些需要注意的事项:

  • 精度要求moneysmallmoney数据类型提供固定的四位小数精度。如果你的应用需要不同的精度或者超出这些范围的值,可能需要使用decimalnumeric类型。

  • 性能moneysmallmoney类型被优化用于货币计算,可能提供比decimal更好的性能。但是,如果需要超过四位小数的精度,还是应该使用decimal

  • 计算和舍入:在涉及货币的计算时,需要考虑舍入规则。SQL Server在进行货币类型数据的四舍五入时是自动进行的,但是如果需要更特殊的舍入逻辑,可能需要自定义。

  • 存储大小money类型比decimalnumeric类型使用更少的存储空间,但是decimalnumeric可以提供更大的范围和精度。

  • 格式化:在将货币类型的数据展现给用户时,通常需要根据用户的区域设置进行适当的格式化。这通常在应用程序层面处理,而不是在数据库层面。

七、位类型

在SQL Server中,用于存储位(Boolean)值的数据类型是 BIT 类型。BIT 类型用于存储布尔值,通常用于表示简单的是/否或真/假状态。

  • 存储大小:bit 数据类型的存储大小实际上非常小。每个 bit 列只占用一位,但是最小的存储单位是字节。因此,一个 bit 列可以存储在一个字节中,而8个 bit 列只需1个字节存储。
  • 可用范围:bit 类型的值可以是 0、1 或 NULL(如果列允许 NULL 值)。
  • 默认值:在没有指定默认值的情况下,bit 类型的列的默认值是 0。

使用 BIT 类型时需要注意的事项:

  1. 存储效率:当表中有多个 bit 列时,SQL Server会尽量将它们存储在同一个字节中以节省空间。最多可以有8个 bit 列存储在一个字节中。

  2. 值的解释:尽管 bit 数据类型表示布尔值,但在SQL Server中,它实际上是表示整数值0或1。这意味着在执行逻辑运算时,它们可能被转换为整数。

  3. 转换:当 bit 类型与其他数据类型一起使用时,可能会发生隐式或显式转换,这可能会影响性能。

  4. NULL 值:如果 bit 列被定义为允许 NULL 值,那么除了0和1以外,它还可以包含一个 NULL 值。在逻辑表达式中使用含有 NULL 的 bit 列需要特别小心,因为 NULL 与任何非 NULL 值的比较都将返回 NULL。

  5. 默认绑定:在定义表结构时,如果想要 bit 列有一个非0的默认值,需要显式地设置一个默认约束,如 DEFAULT 1

  6. 逻辑操作BIT 列可以参与逻辑操作,如 andornot。当用于逻辑操作时,0 表示 false,1 表示 ture

八、二进制类型

在SQL Server中,用于存储二进制数据的数据类型主要有以下几种:

  1. binary

    • 固定长度的二进制数据。
    • 存储大小是定义的列长度。
    • 长度范围是 1 到 8,000 字节。
  2. varbinary

    • 可变长度的二进制数据。
    • 存储大小是实际数据的长度加上2字节,用于表示长度,但最大不超过定义的长度。
    • 长度范围是 1 到 8,000 字节。
  3. varbinary(MAX)

    • 可变长度的二进制数据。
    • 存储大小最大可以是 2^31-1 字节。
    • 用于存储超过 8,000 字节的大型数据对象,如文件、图像等。

使用这些二进制数据类型时,需要注意以下事项:

  • 选择适当类型:当我们知道列将具有固定长度的二进制数据时,使用 binary 类型可能会更合适。如果列中的数据项的大小可能会有所不同,那么 varbinaryvarbinary(MAX) 类型可能会更加适用。

  • 性能:大型二进制数据可能会影响性能,特别是在涉及到大量数据的检索和更新操作时。

  • 存储空间:固定长度的 binary 类型可能会浪费存储空间,因为它总是使用定义的最大长度存储数据。相比之下,varbinary 类型只存储实际需要的空间加上长度的额外2字节。

  • 最大长度限制:对于 binaryvarbinary 数据类型,当数据超过 8,000 字节时,应该使用 varbinary(MAX) 类型。

  • 数据操作:操作二进制数据通常比操作文本数据更复杂,因为我们需要使用适当的函数和方法来处理它们。

  • 使用场景:二进制数据类型通常用于存储图像、文件、音频、视频等非文本数据。

  • 备份和迁移:含有大量二进制数据的数据库在备份和迁移时一般需要更多的时间和资源。

  • 安全性:存储敏感数据(如加密的字节)时需要考虑安全性和加密策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/328285.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单元测试之Stub和Mock

实例 Analyze类会检查filename的长度,如果小于8,我们就会使用一个实现IWebService的类来记录错误. 我们需要给Analyze方法写单元测试。 public class LogAnalyzer {private IWebService service;private IEmailService email;public IWebService Serv…

20240116使用Firefly的AIO-3399J的预编译的Android10固件确认RT5640声卡信息

20240116使用Firefly的AIO-3399J的预编译的Android10固件确认RT5640声卡信息 2024/1/16 17:55 百度:RK3399 ALC5640 RK3399 RT5640 BING:RK3399 ALC5640 LINE-IN接麦克风不会有声音的。 耳机只有右边有声音,但是偏小,可以通过音量…

Python pip install 也能踩坑!

难得有心情、空余时间上手 Scrapy,前一段时间看到一个很好的免费壁纸网站,想着下手爬取看看,反正还有一个 500G 的硬盘在吃灰,用于存放美图不是不可以。也是很久没接触 Scrapy,上一次使用还是上一次,先准备…

软件测试|解决Github port 443 : Timed out连接超时的问题

前言 GitHub是全球最大的开源代码托管平台之一,许多开发者和团队使用它来管理和协作开源项目。但在当下,我们在clone或者提交代码时会经常遇到"GitHub Port 443: Timed Out"错误,这意味着我们的电脑无法建立与GitHub服务器的安全连…

redis之单线程和多线程

目录 1、redis的发展史 2、redis为什么选择单线程? 3、主线程和Io线程是怎么协作完成请求处理的? 4、IO多路复用 5、开启redis多线程 1、redis的发展史 Redis4.0之前是用的单线程,4.0以后逐渐支持多线程 Redis4.0之前一直采用单线程的主…

【PyTorch】在PyTorch中使用线性层和交叉熵损失函数进行数据分类

在PyTorch中使用线性层和交叉熵损失函数进行数据分类 前言: 在机器学习的众多任务中,分类问题无疑是最基础也是最重要的一环。本文将介绍如何在PyTorch框架下,使用线性层和交叉熵损失函数来解决分类问题。我们将以简单的Iris数据集作为起点…

Linux 批量添加 known_hosts

前言 我们在做完linux ssh 免密登录后,通常会执行一些自动化任务(比如启动Spark集群),也就是需要ssh到每台节点执行相同命令。但是有一个问题就是如果 known_hosts 文件中不存在这个ip的话,在第一次连接时会弹出确认公…

【小笔记】算法基础超参数调优思路

【学而不思则罔,思维不学则怠】 9.29 本文总结一下常见的一些超参数调优思路 Batch_size 2023.9.29 简单来说,较大的bz可以加快训练速度,特别是基于GPU进行模型训练时,应该在显存允许范围内,尽量使用较大的bz。两个…

超实用+全覆盖!17个大分类,近500款主流实用精品AI工具导航,太贴心了!总有一款适合你。

超实用全覆盖!17个大分类,近500款主流实用精品AI工具导航,太贴心了!总有一款适合你。 大家好!我是老码农。 今天给大家分享的这个工具导航:非常棒。 那棒在哪里呢? 第1点:非常垂…

SpringAOP-说说 Spring AOP 和 AspectJ AOP 区别

Spring AOP Spring AOP 属于运行时增强,主要具有如下特点: 基于动态代理来实现,默认如果使用接口的,用 JDK 提供的动态代理实现,如果是方法则使用 CGLIB 实现Spring AOP 需要依赖 IOC 容器来管理,并且只能…

IOS-相机权限申请-Swift

配置描述 在Info.plist文件中,新建一个键值对Privacy - Camera Usage Description(或者NSCameraUsageDescription),值为申请描述说明,自定义的 申请 然后在需要申请的文件中导入AVFoundation import AVFoundation…

nodejs学习计划--(一)初始nodejs

1. 介绍nodejs Node.js是什么? Node.js是一个开源的,跨平台的Javascript运行环境 通俗来讲:Node.js就是一款应用程序,是一款软件,它可以运行JavaScript Node.js的作用: 开发服务器应用开发工具类应用开发…

美国 SEC 批准比特币现货 ETF 上市,SEC 告诉我们的风险包含哪些?

撰文:Will 阿望 查看原文:美国 SEC 批准比特币现货 ETF 上市,SEC 告诉我们的风险包含哪些? 历经十年的 BTC ETF 艰辛审批之路终于迎来了胜利的曙光,2024 年 1 月 11 日凌晨 4 时,美国证监会(S…

浅谈Vue中监听属性—watch监听器的使用方法

目录 💡 监听属性的概念 💡 watch有什么作用 💡 watch的基本语法 💡 监听属性的优缺点 💡 使用watch的场景 💡 监听属性的概念 在计算机科学中,watch是一种调试技术,用于监视程…

【SQL】SQL语法小结

相关资料 参考链接1:SQL 语法(超级详细) 参考链接2:史上超强最常用SQL语句大全 SQL练习网站:CSDN、牛客、LeetCode、LintCode SQL相关视频: 推荐书籍: 文章目录 数据分析对SQL的要求SQL语法简介…

onlyoffice源码编译

环境准备 官网要求CPU dual core 2 GHz or better RAM at least 2 GB, but depends of the host OS. More is better HDD at least 40 GB of free space SWAP at least 4 GB, but depends of the host OS. More is better SoftwareOS 64-bit Ubuntu 16.04 The solution has be…

ARM day1

一、概念 ARM可以工作的七种模式用户、系统、快中断、中断、管理、终止、未定义ARM核的寄存器个数 37个32位长的寄存器,当前处理器的模式决定着哪组寄存器可操作,且任何模式都可以存取: PC(program counter程序计数器) CPSR(current program…

QT上位机开发(dock窗口在软件布局中的应用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在软件开发中,一般有主窗口和子窗口之分。主窗口也就是main window,是最重要的操作界面。子窗口就是各种属性配置、参数配置…

USB8814动态信号采集卡——声音振动类信号处理的理想之选!

背景介绍: 科技的发展在一定程度上依赖于对信号的处理,信号处理技术的先进性在很大程度上决定了科技发展的速度和方向。数字信号处理技术的崛起,彻底改变了传统的信息与信号处理方式,使得数据采集这一前期工作在数字系统中发挥着…

使用PyTorch实现混合专家(MoE)模型

Mixtral 8x7B 的推出在开放 AI 领域引发了广泛关注,特别是混合专家(Mixture-of-Experts:MoEs)这一概念被大家所认知。混合专家(MoE)概念是协作智能的象征,体现了“整体大于部分之和”的说法。MoE模型汇集了各种专家模型…