下表列出了 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) |
下表列出了 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。 |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |