什么是SQL Server?为什么数据类型很重要?

什么是SQL Server?为什么数据类型很重要?

有许多类型的数据与 SQL Server 兼容,重要的是要了解它们是什么以避免不兼容的数据类型出现问题。理解兼容的数据类型也是理解数据类型优先级的基础,它决定了在处理两种不同类型的对象时会产生什么类型的数据。 在本指南中,我们将介绍 SQL Server 支持的所有数据类型,以及使用 Transact-SQL 或 Microsoft .NET Framework 定义自定义数据类型的过程。

什么是SQL Server?为什么数据类型很重要?-美联科技

什么是 SQL Server?

在深入了解 SQL Server 支持的许多数据类型之前,先快速回顾一下 SQL Server 是什么。Microsoft 开发了 SQL Server 作为关系数据库管理系统 (RDBMS)。SQL Server 使用 SQL,这是使用各种关系数据库的标准语言。 Microsoft 的 SQL Server 不再专属于 Windows 环境,现在可以在 Linux 上使用,这对于有兴趣使用 SQL Server 的人来说是个好消息。此外,微软的云平台 Azure 支持 SQL Server。因此,如果您需要一个地方来托管它,那么没有比原生解决方案更好的地方了。

微软将其称为“最了解 SQL Server 的云”,Azure SQL Server 确实受益于无缝集成、简单性和可靠性,因为服务器和云基础设施都是由同一家公司开发和维护的。 但是,无论您在何处托管 SQL Server,都必须注意 SQL Server 使用的 SQL 语言略有不同。Microsoft 开发了 Transact-SQL (T-SQL),它与标准 SQL 非常相似,但定义了一组对 SQL Server 编程所必需的专有概念。 如果您熟悉 SQL,则使用 Transact-SQL 并不难,您将能够轻松使用 SQL Server。但有效使用 SQL Server 的另一个关键方面是了解它支持的所有数据类型。

为什么数据类型很重要?

错误的数据类型会导致数据库性能、查询优化和数据截断等问题。这些问题通常是开发团队首先意识到的,因为它们是跟踪速度和性能的问题。尽管如此,问题可能会蔓延到整个组织,导致数据完整性问题和其他严重挑战。 如果您是 SQL Server 的新手,那么数据类型的绝对数量可能会让人不知所措。

什么是SQL Server?为什么数据类型很重要?-美联科技

但是,它们组织得井井有条并且有据可查,只要您了解计划存储的数据类型,就可以更容易地找到所需的内容。当然,虽然您可以随时参考,但获得 SQL Server 数据类型的知识对于长期的效率和优化至关重要。深入研究后,您会发现存在一些重叠,并且只有在您完全了解所有选项的情况下,才能知道何时选择浮点数而不是十进制数或选择可变长度而不是固定值。

有哪些不同的数据类别?

下面是 SQL Server 中每个数据类别的概览,以及适合每个数据类型的所有数据类型。

精确数字

使用精确的数字数据类型时,了解您的选项很重要,这样您就可以选择适合您的用例的最小数据类型。还需要选择与您存储的数字类型相对应的数据类型,例如货币的货币或小货币。

  • tinyint:最小的整数存储类型,能够存储 0 到 255 之间的数字。
  • smallint:整数存储类型,大小为两倍,最多 2 个字节。
  • int:整数存储类型,最多存储 4 个字节。
  • bigint:最大的整数存储类型,最多可容纳 8 个字节的数据。
  • 十进制和数字:这些同义词指的是相同的数据类型,其特点是其固定的小数位数和精度。
  • bit:此数据类型的值始终为 1、0 或 NULL。您可以将真/假数据转换为位,其中 1 等于 True,0 等于 False。
  • smallmoney:此数据类型表示货币值,最多允许两位小数。
  • money:这是另一种货币数据类型,但最多允许四位小数。

什么是SQL Server?为什么数据类型很重要?-美联科技

Unicode 字符串

如果您不熟悉 Unicode,它是一种通用标准,它为每个字符分配一个唯一编号,从而允许对书面文本进行一致的编码和表示。例如,Unicode 中的“嘿”将被分解如下:U+0048(“H”)、U+0065(“E”)和 U+0059(“Y”)。SQL Server 支持使用这些字符串的所有 Unicode 字符数据。它们可以是固定的或可变的。

  • nchar:大小固定,推荐在列数据大小一致时使用。
  • nvarchar:大小可变,建议在列中的数据大小变化很大时使用。
  • ntext:计划在 SQL Server 的未来版本中删除,设计为 Unicode 的可变长度数据类型。Microsoft 建议改为使用 nvarchar(max)。

近似数值

当数值数据不能精确表示时,它被称为“浮点”数值数据,您可以使用近似数数据类型来存储它。对于浮点数据类型,数字使用科学计数法写入,因此 825,000 将存储为 8.5 x 10 5。浮点数可以非常大或非常小。浮点数和十进制数据类型都可以存储带有小数的数字——不同之处在于浮点数需要更少的存储空间,而小数则更精确。SQL Server 支持浮点数和实数数据类型的两种近似数值。

  • float:双精度浮点数,相当于 8 个字节或 64 位。
  • real:单精度浮点数,相当于 4 个字节或 32 位。

什么是SQL Server?为什么数据类型很重要?-美联科技

字符串

字符串有一个不言自明的名称:这些数据类型用于存储字符。它们的大小可以是固定的或可变的。

  • char:使用静态内存位置的固定大小的字符串数据。当您知道字符串的长度并且列中的所有字符串都相同时是理想的。
  • varchar:使用动态内存位置的可变大小的字符串数据。如果您不确定字符串的长度或列中字符串的长度会有很大差异时使用。
  • text:计划在 SQL Server 的未来版本中删除,设计为非 Unicode 数据的可变长度数据类型。Microsoft 建议将其替换为 varchar (max)。

二进制字符串

二进制数据类型支持固定或可变的数据字符串。字符串和二进制字符串之间的区别在于它们包含的数据:字符串通常存储文本,但也可以存储数字或符号。二进制字符串通常以字节的形式存储非传统数据,例如图片。

  • binary:固定长度,当列中的数据大小一致时非常适合使用。
  • varbinary:当列中的数据大小变化很大时,可变长度是理想的。
  • 图片:计划在 SQL Server 的未来版本中删除,旨在存储可变长度的二进制数据。Microsoft 建议将其替换为 varbinary (max)。

什么是SQL Server?为什么数据类型很重要?-美联科技

日期和时间

这些数据类型明确设计用于存储日期和时间。有些支持时区意识,有些则不支持。在处理日期和时间时,选择一种保持条目格式一致的数据类型并选择一种足够灵活以支持您需要的详细程度(即一天中的时间、时区等)的数据类型至关重要。

  • date:定义日期。默认格式为 YYYY-MM-DD,但可以采用 20 多种不同的方式进行格式化,包括 DMY、DYM 和 YMD。
  • datetimeoffset:定义日期和时间。此数据类型可识别时区。 datetime2:上述数据类型的扩展,具有可选的小数秒精度。
  • datetime:与 datetime2 类似,但小数秒精度较低。
  • smalldatetime:定义日期和时间,但秒始终为零。
  • time:定义一天中的某个时间,但不知道时区。

其他数据类型

SQL Server 中存在其他数据类型,但它们并不完全适合上述任何类别。因此,这些数据类型仅存在于“其他”下。其他数据类型包括:

  • rowversion:用于在表中标记行的版本。不保留日期或时间的简单递增数字。
  •  hierarchyid:可变长度系统数据类型,用于表示层次结构中的位置。
  • uniqueidentifier:能够存储多达 16 个字节的全局唯一标识符 (GUID)。
  • sql_variant:存储 SQL 支持的各种数据类型。sql_variant 最重要的部分是它是可变的。例如,一个 sql_variant 列可以在一行中包含一个 int,而在另一行中包含一个二进制值。为了应用算术运算,如 SUM 或 PRODUCT,必须首先将类型转换为与该运算一起使用的东西。
  • xml:存储 XML 数据。
  • 空间几何类型:表示平面坐标系中的数据。
  • 空间地理类型:表示圆形地球坐标系中的数据。
  • 表:用于存储结果以供稍后处理的特殊数据类型。

什么是SQL Server?为什么数据类型很重要?-美联科技

定义自定义数据类型

如果您的自定义数据类型在上述任何类别中都不是特定的,您仍然可以将其带到 SQL Server 上,只要您提前设置它。使用 Transact-SQL 或 Microsoft .NET Framework,开发人员可以为他们的项目定义自定义数据类型。

在创建自定义数据类型时,SQL Server 的界面有一些工具可以帮助您生成 Transact-SQL。您需要指定的字段包括架构、名称、基础数据类型、长度、允许空值、字节大小、默认值中的可选字段以及数据类型必须遵循的任何规则。例如,电子邮件字段可能会使用 varchar 基础类型,并且必须包含 @ 和 .,以及不允许使用的字符列表。然后,您将设置一个适合您需要的最大长度,并且字节数将自动填充到界面中。

如果您需要创建自己的数据类型,Microsoft 会提供更多信息。

选择正确的数据类型

使用 SQL Server 时,为正在使用的任何数据选择正确的数据类型至关重要。不这样做可能会导致数据质量问题或数据丢失,例如在您使用数据类型来存储不打算这样做的日期和时间的情况下。错误的数据类型也会对​​查询和性能产生负面影响。

例如,如果您需要存储整数,您可能会认为只需选择精确的数字数据类型就不会出错。但是,不必要地使用 bigint 类型来存储像年龄这样的小而简单的数字会导致资源浪费。

大多数人会告诉您在处理数字数据时从 smallint、integer、bigint 或 decimal 中进行选择。如果您正在处理非常大的数字,他们可能会建议 decfloat 或 float。但是,当您处理特定用例时,此建议过于简单和笼统。

客户经理