Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » MobiLink - 服务器管理 » MobiLink 参考 » 远程数据库和统一数据库之间的 MobiLink 数据映射

 

IBM DB2 主机数据映射

映射到 DB2 主机统一数据类型

下表列出了 SQL Anywhere 和 UltraLite 远程数据类型与 DB2 主机统一数据类型的映射关系。例如,远程数据库中类型为 BIT 的列对应统一数据库中的类型 SMALLINT。

SQL Anywhere 或 UltraLite 数据类型

IBM DB2 主机数据类型

注释

BIGINT

DECIMAL(20)

BINARY(n<MRL)

VARCHAR(n) FOR BIT DATA

在创建 DB2 表时,您需要注意 DB2 页面大小。DB2 的最大行长度取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。表中所有列的长度都不能超出上述限制。如果表中包含 BLOB 或 CLOB 列,则使用 LOB 定位器而不是直接使用 BLOB 或 CLOB 数据计算行长度。有关详细信息,请参见 DB2 文档。

BINARY(n>=MRL)

BLOB(n)

在创建 DB2 表时,您需要注意 DB2 页面大小。DB2 的最大行长度取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。表中所有列的长度都不能超出上述限制。如果表中包含 BLOB 或 CLOB 列,则使用 LOB 定位器而不是直接使用 BLOB 或 CLOB 数据计算行长度。有关详细信息,请参见 DB2 文档。

BIT

SMALLINT

CHAR(n<MRL)

VARCHAR(n)

MRL 是 DB2 的最大行长度。

DB2 VARCHAR 最多可以保存 32672 个字节,具体情况取决于页面大小。

DB2 的最大行长度 (MRL) 取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。有关详细信息,请参见 DB2 文档。

SQL Anywhere CHAR 与 SQL Anywhere VARCHAR 完全相同。

CHAR(n>=MRL)

CLOB(n)

DB2 的最大行长度 (MRL) 取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。有关详细信息,请参见 DB2 文档。

SQL Anywhere CHAR 与 SQL Anywhere VARCHAR 完全相同。

DB2 CLOB 值可以比 SQL Anywhere 或 UltraLite 值长。您必须确保下载的值不能过大。

DATE

DATE

对于 SQL Anywhere 和 UltraLite,时间值格式必须为 00:00:00。

DATETIME

TIMESTAMP

DECIMAL(p<32, s)

DECIMAL(p,s)

SQL Anywhere DECIMAL 的精度介于 1 和 127 之间。DB2 DECIMAL 的最大精度为 31。任何 DECIMAL 精度大于 31 的 SQL Anywhere 数据都不能同步到 DB2。

DECIMAL(p>=32,s)

精度大于 31 的任何 SQL Anywhere DECIMAL 数据都不能同步到 DB2。

DOUBLE

DOUBLE

如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,DOUBLE 就会导致问题。我们并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。

为了成功地进行同步,SQL Anywhere/UltraLite DOUBLE 值必须在 DB2 主机的 DOUBLE 值域之内。

FLOAT(1-24)

REAL

如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,FLOAT 就会导致问题。我们并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。

为了成功地进行同步,DB2 主机的 REAL 值必须在 SQL Anywhere/UltraLite REAL 的值域之内。

FLOAT(25-53)

DOUBLE

如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,FLOAT 就会导致问题。我们并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。

为了成功地进行同步,SQL Anywhere/UltraLite DOUBLE 值必须在 DB2 主机的 DOUBLE 值域之内。

IMAGE

BLOB(n)

INTEGER

INTEGER

LONG BINARY

BLOB(n)

LONG NVARCHAR

CLOB(n)

DB2 中没有相应的数据类型。如果 DB2 字符集是 Unicode,SQL Anywhere long NVARCHAR 可同步到 DB2 CLOB。UltraLite 没有 LONG NVARCHAR。

LONG VARBIT

BLOB(n)

LONG VARCHAR

CLOB(n)

MONEY

DECIMAL(19.4)

NCHAR(c)

VARCHAR(n) 或 CLOB(n)

SQL Anywhere NCHAR 与 SQL Anywhere NVARCHAR 完全相同。

DB2 中没有相应的数据类型。如果 DB2 字符集是 Unicode,NCHAR 可同步到 DB2 VARCHAR 或 CLOB。SQL Anywhere NCHAR 的大小是字符数,DB2 VARCHAR 的大小是字节数。如果映射到 VARCHAR,则 NCHAR 的总字节数不能大于 MRL。否则,NCHAR 应映射到 CLOB。NCHAR(c) 中的字节数很难计算,但可以近似为 c=n/4。通常,如果 c 小于 MRL/4,则映射到 VARCHAR(n);如果 c 大于或等于 MRL/4,则映射到 CLOB(n)。

NTEXT

CLOB(n)

SQL Anywhere NTEXT 与 SQL Anywhere LONG NVARCHAR 完全相同。

DB2 中没有相应的数据类型。如果 DB2 字符集是 Unicode,NCHAR 可同步到 DB2 VARCHAR 或 CLOB。SQL Anywhere NCHAR 的大小是字符数,DB2 VARCHAR 的大小是字节数。如果映射到 VARCHAR,则 NCHAR 的总字节数不能大于 MRL。否则,NCHAR 应映射到 CLOB。NCHAR(c) 中的字节数很难计算,但可以近似为 c=n/4。通常,如果 c 小于 MRL/4,则映射到 VARCHAR(n);如果 c 大于或等于 MRL/4,则映射到 CLOB(n)。

NUMERIC(p<32, s)

NUMERIC(p,s)

NUMERIC(p>=32,s)

DB2 中没有相应的数据类型。

NVARCHAR(c)

VARCHAR(n) 或 CLOB(n)

DB2 中没有相应的数据类型。如果 DB2 字符集是 Unicode,NCHAR 可同步到 DB2 VARCHAR 或 CLOB。SQL Anywhere NCHAR 的大小是字符数,DB2 VARCHAR 的大小是字节数。如果映射到 VARCHAR,则 NCHAR 的总字节数不能大于 MRL。否则,NCHAR 应映射到 CLOB。NCHAR(c) 中的字节数很难计算,但可以近似为 c=n/4。通常,如果 c 小于 MRL/4,则映射到 VARCHAR(n);如果 c 大于或等于 MRL/4,则映射到 CLOB(n)。

REAL

REAL

如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,REAL 就会导致问题。我们并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。

为了成功地进行同步,DB2 主机的 REAL 值必须在 SQL Anywhere/UltraLite REAL 的值域之内。

SMALLDATETIME

TIMESTAMP

SMALLINT

SMALLINT

SMALLMONEY

DECIMAL(10,4)

TEXT

CLOB(n)

SQL Anywhere TEXT 与 SQL Anywhere LONG VARCHAR 完全相同。

TIME

TIMESTAMP 或 TIME

带小数秒的 SQL Anywhere 和 UltraLite TIME 值需要 DB2 TIMESTAMP。小数秒始终为零的 SQL Anywhere 和 UltraLite 时间值可以使用 DB2 TIME。

TIMESTAMP

TIMESTAMP

TINYINT

SMALLINT

UNIQUEIDENTIFIER

CHAR(36)

UNIQUEIDENTIFIERSTR

CHAR(36)

不建议将 UNIQUEIDENTIFIERSTR 用于 DB2。请改用 UNIQUEIDENTIFIER。

UNSIGNED BIGINT

DECIMAL(20)

DB2 值必须是非负数。

UNSIGNED INTEGER

DECIMAL(11)

DB2 值必须是非负数。

UNSIGNED SMALLINT

DECIMAL(5)

DB2 值必须是非负数。

UNSIGNED TINYINT

SMALLINT

DB2 值必须是非负数。

VARBINARY(n<MRL)

VARCHAR(n) FOR BIT DATA

在创建 DB2 表时,您需要注意 DB2 页面大小。DB2 的最大行长度取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。表中所有列的长度都不能超出上述限制。如果表中包含 BLOB 或 CLOB 列,则使用 LOB 定位器而不是直接使用 BLOB 或 CLOB 数据计算行长度。有关详细信息,请参见 DB2 文档。

VARBINARY(n>=MRL)

BLOB(n)

在创建 DB2 表时,您需要注意 DB2 页面大小。DB2 的最大行长度取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。表中所有列的长度都不能超出上述限制。如果表中包含 BLOB 或 CLOB 列,则使用 LOB 定位器而不是直接使用 BLOB 或 CLOB 数据计算行长度。有关详细信息,请参见 DB2 文档。

VARBIT(n<MRL)

VARCHAR(n)

在创建 DB2 表时,您需要注意 DB2 页面大小。DB2 的最大行长度取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。表中所有列的长度都不能超出上述限制。如果表中包含 BLOB 或 CLOB 列,则使用 LOB 定位器而不是直接使用 BLOB 或 CLOB 数据计算行长度。有关详细信息,请参见 DB2 文档。

VARBIT(n>=MRL)

CLOB(n)

在创建 DB2 表时,您需要注意 DB2 页面大小。DB2 的最大行长度取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。表中所有列的长度都不能超出上述限制。如果表中包含 BLOB 或 CLOB 列,则使用 LOB 定位器而不是直接使用 BLOB 或 CLOB 数据计算行长度。有关详细信息,请参见 DB2 文档。

VARCHAR(n<MRL)

VARCHAR(n)

DB2 VARCHAR 最多可以保存 32672 个字节,具体情况取决于页面大小。

DB2 的最大行长度 (MRL) 取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。有关详细信息,请参见 DB2 文档。

SQL Anywhere CHAR 与 SQL Anywhere VARCHAR 完全相同。

VARCHAR(n>=MRL)

CLOB(n)

DB2 的最大行长度 (MRL) 取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。有关详细信息,请参见 DB2 文档。

SQL Anywhere CHAR 与 SQL Anywhere VARCHAR 完全相同。

DB2 CLOB 值可以比 SQL Anywhere 或 UltraLite 值长。您必须确保下载的值不能过大。

XML

CLOB(n)

SQL Anywhere XML 与 SQL Anywhere LONG VARCHAR 完全相同。

映射到 SQL Anywhere 或 UltraLite 远程数据类型

下表列出了 DB2 主机统一数据类型与 SQL Anywhere 和 UltraLite 远程数据类型的映射关系。例如,统一数据库中类型为 INT 的列对应远程数据库中的类型 INTEGER。

IBM DB2 主机数据类型 SQL Anywhere 或 UltraLite 数据类型 注释

BLOB

LONG BINARY

CHAR(n)

VARCHAR(n)

SQL Anywhere 中没有与 DB2 CHAR 对等的类型。不应在要同步的统一数据库列中使用 CHAR。如果必须同步 DB2 CHAR 列,请使用 -b 选项运行 MobiLink 服务器。

CHAR(n) FOR BIT DATA

BINARY(n)

SQL Anywhere 中没有与 DB2 CHAR 对等的类型。不应在要同步的统一数据库列中使用 CHAR。如果必须同步 DB2 CHAR 列,请使用 -b 选项运行 MobiLink 服务器。

CLOB(n)

LONG VARCHAR

DATE

DATE

对于 SQL Anywhere 和 UltraLite,时间值格式必须为 00:00:00。

DBCLOB(n)

LONG VARCHAR

数据类型 DBCLOB(n) 仅用于双字节字符。SQL Anywhere 没有相对应的数据类型。DB2 字符集为 Unicode 时,DBCLOB(n) 等同于 CLOB。

DECIMAL(p,s)

DECIMAL(p,s)

DOUBLE

DOUBLE

如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,DOUBLE 就会导致问题。我们并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。

为了成功地进行同步,SQL Anywhere/UltraLite DOUBLE 值必须在 DB2 DOUBLE 值域之内。

FLOAT

DOUBLE

如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,FLOAT 就会导致问题。我们并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。

为了成功地进行同步,SQL Anywhere/UltraLite DOUBLE 值必须在 DB2 DOUBLE 值域之内。

GRAPHIC(n)

VARCHAR(2n)

DB2 GRAPHIC 不会使用空白进行填充。SQL Anywhere 中没有与 DB2 GRAPHIC 对等的类型。不应在要同步的统一数据库列中使用 GRAPHIC。

数据类型 GRAPHIC 仅用于双字节字符。SQL Anywhere 没有相对应的数据类型。DB2 字符集为 Unicode 时,GRAPHIC 等同于 CHAR。

INT

INTEGER

NUMERIC(p,s)

NUMERIC(p,s)

REAL

DOUBLE

如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,REAL 就会导致问题。我们并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。

在 DB2 主机上,REAL、DOUBLE 和 FLOAT 具有相同的值域,都在 -7.2E+75 到 7.2E+75 之间。最大的负值约为 -5.4E-79,最小的正值约为 5.4E-79。SA/UL REAL 的值域为 -3.402823e+38 到 3.402823e+38,DOUBLE 的值域为 2.22507385850721e-308 到 1.79769313486231e+308。为了成功地进行同步,DB2 主机 REAL 的值必须在 SA/UL REAL 的值域之内,而 SA/UL DOUBLE 的值必须在 DB2 主机 DOUBLE 的值域之内。

ROWID

在 SQL Anywhere 或 UltraLite 中没有相应的数据类型。ROWID 由 DB2 服务器进行维护。该数据类型无法同步。

SMALLINT

SMALLINT

TIME

TIME

SQL Anywhere TIME 值中的小数秒值在下载时会被截断。要避免出现问题,请不要使用小数秒。

TIMESTAMP

TIMESTAMP

VARCHAR(n)

VARCHAR(n)

VARCHAR(n) FOR BIT DATA

VARBINARY(n)

VARGRAPHIC(n)

VARCHAR(2n)

数据类型 VARGRAPHIC 仅用于双字节字符。SQL Anywhere 没有相对应的数据类型。DB2 字符集为 Unicode 时,VARGRAPHIC 等同于 VARCHAR。