创建要素类和表时,请为各字段选择数据类型。 可用的类型包括多种数字类型、文本类型、日期类型、二进制大对象 (BLOB) 和全局唯一标识符 (GUID)。 选择正确的数据类型可以正确存储数据,并且便于分析、数据管理和满足业务需求。
本主题中介绍的数据类型包括在 ArcGIS 中创建要素类或表时可用的数据类型。 如果在数据库中存储数据或在数据库中存储地理数据库,ArcGIS 数据类型和数据库管理系统 (DBMS) 的数据类型可能无法直接匹配。 这些类型将与可用的最接近数据库数据类型进行匹配。 此过程称为数据类型映射。 在此过程中,这些值可能会作为另一种类型存储在数据库中,并且数据属性也将应用其他条件。 因此,表中的数据类型或 ArcGIS Pro 中的要素类属性可能与您最初定义的有所不同。 要了解有关数据类型映射进程的详细信息,请参阅 ArcGIS 支持的 DBMS 数据类型。
其他数据存储格式,例如 shapefile 或 dBase 文件 (DBF) 表具有不同的数据类型限制。 当您在各种数据存储类型之间移动数据时,一定要了解目标存储格式的数据类型和大小限制。
数值
数字可存储为以下四种数值数据类型中的一种类型:
- 短整型
- 长整型
- 浮点型(单精度浮点数)
- 双精度型(双精度浮点数)
选择数据类型时,应考虑需要存储整数还是小数。 如果仅需存储整数(如 12 或 12,345,678),可指定短整型或长整型。 如果需要存储具有小数数位的小数(如 0.23 或 1234.5678),可指定浮点型或双精度型。
如果需要在短整型与长整型之间或者浮点型与双精度型之间做出选择,请为需要存储的数字范围选择存储空间占用最小的数据类型。 这不仅能够最大限度地减少所需的存储量,而且还能够提高性能。 例如,要仅存储介于 -32,768 和 32,767 之间的整数,则可指定短整型数据类型,因为它仅占用 2 个字节,而长整型数据类型却占用 4 个字节。 要仅存储介于 -3.4E38 和 1.2E38 之间的小数,则可指定浮点数据类型,因为它仅占用 4 个字节,而双精度型数据类型却占用 8 个字节。
下表列出了数据类型、对应的范围和存储要求。 此处列出的数值范围适用于文件地理数据库和移动地理数据库。 数据库和企业级地理数据库的范围略有不同。
数据类型 | 可存储的范围 | 大小(字节) | 应用程序 |
---|---|---|---|
短整型 | -32,768 至 32,767 | 2 | 特定数值范围内不含小数值的数值;编码值 |
长整型 | -2,147,483,648 至 2,147,483,647 | 4 | 特定数值范围内不含小数值的数值 |
浮点型(单精度浮点数) | 约为 -3.4E38 到 1.2E38 | 4 | 特定数值范围内包含小数值的数值 |
双精度型(双精度浮点数) | 约为 -2.2E308 到 1.8E308 | 8 | 特定数值范围内包含小数值的数值 |
如果要向文件地理数据库或移动地理数据库中的表或要素类添加数值字段,只需指定数据类型。 如果要向数据库或企业级地理数据库中的表或要素类添加数值字段,可指定精度(字段的最大长度)。 如果字段为浮点或双精度数据类型,还可以指定字段值的范围(最大小数位数)。
指定精度(字段长度)和范围(小数位数)可限制字段可接受的值范围和数字格式,便于您更好地加以控制。 例如,如果您指定精度为 4、范围为 2 的浮点型,则字段将接受 12.34。 如果要在字段中输入 12.345,则会显示错误消息,因为这超出了所允许的最大位数和小数位数。 或者,如果指定精度为 5、范围为 3 的浮点型,则可输入 12.345。
下面列出了在字段视图中添加字段时可指定的数据类型以及精度和范围值。 精度必须始终大于范围。 范围不适用于整型,因为它们不存储十进制值。 使用此信息有助于选择数据类型、精度和范围。
数据类型 | 精度(字段长度) | 范围(小数位数) |
---|---|---|
短整型* | 1–5 (Oracle);5(IBM Db2、Microsoft SQL Server 和 PostgreSQL) | 0 |
长整型 | 6–10 (Oracle);6–9 (Db2)、10(SQL Server 和 PostgreSQL) | 0 |
浮点型 | 1-6 | 1-6 |
双精度 | 7+ | 1+ |
*默认情况下,在 ArcGIS Pro 中创建的短整型精度为 5。 但是,短整型列只可存储介于 -32,768 和 32,767 之间的值。 即便将精度设置为 5,也无法在短整型字段中存储大于 32,767 或小于 -32,768 的值。 无需在 Oracle 以外的数据库中为在 ArcGIS Pro 中创建的短整型列指定精度。
下表提供了一些数字范围及其如何存储在数据库或企业级地理数据库中的示例:
范围 | 数据类型 | 精度(字段长度) | 范围(小数位数) |
---|---|---|---|
0 至 99 | 短整型 | 2 | 0 |
-99 到 99* | 短整型 | 3 | 0 |
-32,768 到 32,767* | 短整型 | 5 | 0 |
-99,999 到 99,999* | 长整型 | 5 | 0 |
0.001 至 0.999 | 浮点型 | 4 | 3 |
1,000.00 至 9,999.99 | 浮点型 | 6 | 2 |
-123,456.78 到 0* | 双精度 | 9 | 2 |
0 至 1,234.56789 | 双精度 | 9 | 5 |
*负数需要额外的精度存储负号。
计算机仅能存储有限的位数,具体情况取决于分配的存储空间。 数据库和地理数据库中双精度型数据的字段可精确地存储最多仅包含 15 位数的数字,因为这是可存入 8 字节存储空间的最长数字。 位于多于此值的数字将被四舍五入,然后以类似于科学记数法的格式进行存储,使它们仅为近似数字。 例如,如果输入包含 20 位数的数字 12,345,678,901,234,567,890,则它会被四舍五入,然后存储为 15 位的数字 1.23456789012346E+19。 结尾的编码值 E+19 可限定小数点的放置位置。
文件或移动地理数据库中数据类型为浮点型的字段可精确存储最多仅包含 6 位的数字。 例如,无法将数字 123,456.7 精确地存储到浮点型字段中,因为此数字包含的位数多于六个。 此数字仍可输入到文件地理数据库的浮点型字段中,但将四舍五入为包含允许的 6 位数的数字 123,457。 要精确地存储此数字,可将其存储在双精度字段中。 企业级地理数据库和数据库中的浮点型字段严格禁止输入超过该字段精度位数的数字,因此并不会进行四舍五入。
文本
文本字段表示一系列字母数字符号。 其中可包括街道名称、特性属性或其他文本描述。 在地理数据库中重复使用文本属性的替代方法是建立编码值。 在此情况中,文本描述将使用数值进行编码。 例如,您可以通过数值对道路类型进行编码:将 1 指定给铺好的改良路面、将 2 指定给碎石路面等等。 这样做的好处是减少地理数据库中占用的存储空间;但是,这些编码值必须为数据用户所了解。 如果在地理数据库的编码值域中定义编码值并将该域与存储编码的整型字段相关联,则在 ArcGIS Pro 中查看该表时,地理数据库将显示文本描述。
文本中所用字符视语言而定。 为了在各种语言之间更方便地转换文本,ArcGIS 将使用 Unicode 对字符进行编码。
日期
日期数据类型可存储日期、时间或同时存储日期和时间。 显示信息的默认格式为 mm/dd/yyyy hh:mm:ss,同时还将指定 AM 或 PM。 通过 ArcGIS 在表中输入日期字段时,输入的数据将转换为此格式。
BLOB
BLOB 是一种存储为长度较长的一系列二进制数的数据。 ArcGIS 会将注记和尺寸存储为 BLOB,图像、多媒体或编码的位等项也可存储在此类型的字段中。 您需要通过自定义的加载器、查看器或第三方应用程序将这些项加载到 BLOB 字段中或者查看 BLOB 字段的内容。
对象标识符
在 ArcGIS 中创建表时,将向表中添加唯一的非空整型字段,以用作对象标识符(对象 ID)。 对象 ID 字段由 ArcGIS 维护并保证表中每行具有唯一 ID。 查看某个表或某个图层的属性表时,您通常会发现,对象 ID 字段以别名 OID 或 ObjectID(针对表)或 FID(针对 web 要素图层和 shapefile)列出。 主要功能(如滚动和显示选择集)将取决于此字段的显示情况。
将表注册到企业级地理数据库中时,也需要对象 ID。 有关注册表时的对象 ID 要求的说明,请参阅将表或视图注册到地理数据库。
大多数 ArcGIS Pro 功能(例如使用“识别”工具)都要求对象 ID 字段中的值唯一。 因此,在 ArcGIS 之外直接使用数据时须谨慎,避免出现重复的对象 ID。 例如,在数据库中使用一对多关系创建视图时,可能会复制对象 ID。 这将导致 ArcGIS Pro 功能中的行为不一致。
当您向地图中添加数据库表时,需要使用对象标识符。 如果 ArcGIS 找不到非空整型字段以用作对象标识符,则系统将提示您选择要用作对象标识符的字段。 有关详细信息,请参阅唯一标识符字段。
注:
ArcGIS 不会保留这些数据库字段中的值,并且无法保证这些字段中的所有值均唯一。
全局标识符
全局 ID 和 GUID 数据类型可存储注册表样式的字符串,该字符串包含用大括号括起来的 36 个字符。 仅地理数据库支持全局 ID。 在除 Microsoft SQL Server 中的地理数据库之外的所有地理数据库中,全局 ID 都存储在文本字段中,并且存储在文本全局 ID 字段中的字符始终为大写字符。
生成全局 ID 时,进程将考虑设备和时间。 鉴于产生重复值的概率可以忽略不计,这些字符串用于唯一标识地理数据库中和地理数据库间的要素或表格行。 这就是在单向和双向地理数据库复制操作中跟踪要素的方法。 开发人员可在关系中或者在需要 GUID 所有应用程序中使用这些字符串。 在某关系中,如果全局 ID 字段是原始键,则 GUID 字段必须为目标键。 可以使用添加全局 ID 地理处理工具将全局 ID 添加到地理数据库的数据集中。 地理数据库之后将自动保留这些值。 也可以创建 GUID 字段,但是必须自行保留该字段的值。
包含本地 GUID 数据类型的数据库(如 SQL Server)会将全局 ID 和 GUID 存储为 16 个字节的值。 不含有本地 GUID 数据类型的数据库会将它们存储为 38 个字节的值。
有关全局 ID 的注意事项
使用全局 ID 时应谨记以下信息:
- 使用字段视图或表窗口中的新建字段命令可将 GUID 字段添加到地理数据库数据集中。
- 可以将全局 ID 添加到地理数据库中独立要素类、表和具有属性的关系类。 全局 ID 不能添加到要素数据集中的单个数据集中;当您在要素数据集上启用全局 ID 时,它们会添加到要素数据集中的所有数据集中。
- 全局 ID 无法添加至数据库中的表。
- 如果存在现有全局 ID 列,则添加全局 ID 工具将保留原有列;它不会删除现有全局 ID 列并添加新的全局 ID 列。
- 如果在地理数据库中将某个要素类添加到要素数据集中并要向其中添加一个全局 ID 列,则需要针对该要素数据集运行添加全局 ID 工具。 此操作将为新要素类添加全局 ID 列。 要素数据集中具有现有全局 ID 列的要素类将保持不变。
- 对于复制与粘贴、数据提取和 XML 工作空间导出及导入操作,会在输出地理数据库中保留全局 ID 值,因此数据库中可能具有非唯一的全局 ID。 对于其他数据导出及导入方法,这些值将不会保留。
字段类型栅格
与仅将要素的字段链接到某图像的超链接不同,字段类型栅格可在地理数据库中存储栅格数据或者将该数据与地理数据库一同存储。 要了解详细信息,请参阅将栅格数据集作为要素类的属性添加。
几何
在 ArcGIS 中,几何数据类型用于指示表中所存储几何的类型(点、线、面、多点或多面体)。 通过 ArcGIS 创建的存储为几何类型的字段命名为 SHAPE。
几何类型属于 ArcGIS 使用的数据类型。 例如,如果为新要素类选择面要素,则默认添加的 SHAPE 字段的 ArcGIS 数据类型为几何。
对于创建要素类工具的几何类型参数,默认几何类型为面。
如果创建具有其他要素类型的要素类,如线、点、多点、多面体、尺寸或注记,则 SHAPE 字段的几何类型也将相应地变为线、点、多点、多面体或者面(尺寸和注记)。
在数据库或企业级地理数据库的要素类中创建几何字段时,还需要考虑数据库数据类型。 在 DBMS 中存储 SHAPE 字段值的方式将取决于 DBMS 使用的几何存储类型。 在企业级地理数据库中创建要素类时,使用的几何存储类型由您指定的配置关键字中的 GEOMETRY_STORAGE 参数设置来确定。 当在数据库中创建要素类时,您可在创建要素类工具的地理数据库设置部分的配置关键字参数中定义字段的空间类型。