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