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 LUW 数据映射

映射到 IBM DB2 LUW 统一数据类型

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

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

SQL Anywhere 或 UltraLite 数据类型

IBM DB2 LUW 数据类型

注释

BIGINT

BIGINT

BINARY(n<MRL)

VARCHAR(n) FOR BIT DATA

BINARY(n>=MRL)

BLOB(n)

BIT

SMALLINT

CHAR(n<MRL)

VARCHAR(n)

CHAR(n>=MRL)

CLOB(n)

DB2 值可以长于 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(p>=32,s)

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

DOUBLE

DOUBLE

DOUBLE 是一种需要舍入的不精确的数字数据类型。使用不同类型的计算机时,DOUBLE 的基础存储经常不同,从而导致不同的舍入。因为主键查找等同性,所以在主键中使用 DOUBLE 是不好的选择。同步环境中尤其如此,因为统一数据库经常运行在与远程数据库不同的硬件上。

FLOAT(1-24)

REAL

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

FLOAT(25-53)

DOUBLE

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

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

CLOB(n)

LONG VARCHAR

CLOB(n)

MONEY

DECIMAL(19,4)

NCHAR(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)。

NUMERIC(p<32, s)

NUMERIC(p,s)

NUMERIC(p>=32,s)

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

NTEXT

CLOB(n)

DB2 中没有相应的数据类型。如果 DB2 字符集是 Unicode,则 NTEXT 可同步到 DB2 CLOB。

NVARCHAR(c)

VARCHAR(n) 或 CLOB(n)

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

REAL

REAL

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

SMALLDATETIME

TIMESTAMP

SMALLINT

SMALLINT

SMALLMONEY

DECIMAL(10,4)

TEXT

CLOB(n)

TIME

TIMESTAMP 或 TIME

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

TIMESTAMP

TIMESTAMP

TINYINT

SMALLINT

对于下载,DB2 值必须是非负数。

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

VARBINARY(n>=MRL)

BLOB(n)

VARBIT(n<MRL)

VARCHAR(n)

VARBIT(n>=MRL)

CLOB(n)

VARCHAR(n<MRL)

VARCHAR(n)

VARCHAR(n>=MRL)

CLOB(n)

DB2 值可以长于 SQL Anywhere 或 UltraLite 值,因此下载时请确保值不要过大。

XML

CLOB(n)

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

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

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

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

BLOB

LONG BINARY

BIGINT

BIGINT

CHAR(n)

VARCHAR(n)

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

CHAR(n) FOR BIT DATA

BINARY(n)

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 是一种需要舍入的不精确的数字数据类型。使用不同类型的计算机时,DOUBLE 的基础存储经常不同,从而导致不同的舍入。因为主键查找等同性,所以在主键中使用 DOUBLE 是不好的选择。同步环境中尤其如此,因为统一数据库经常运行在与远程数据库不同的硬件上。

FLOAT

DOUBLE

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

GRAPHIC(n)

VARCHAR(2n)

DB2 GRAPHIC 会使用空白进行填充,而 SQL Anywhere CHAR 则不会。我们建议您不要使用此数据类型。

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

INT

INTEGER

LONG VARCHAR

VARCHAR(32700)

LONG VARCHAR FOR BIT DATA

VARBINARY(32700)

LONG VARGRAPHIC(n)

VARCHAR(32700)

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

NUMERIC(p,s)

NUMERIC(p,s)

REAL

REAL

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

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。