下表列出了 SQL Anywhere 和 UltraLite 远程数据类型与 IBM DB2 LUW 统一数据类型的映射关系。例如,远程数据库中类型为 BIT 的列对应统一数据库中的类型 SMALLINT。
在创建 IBM DB2 LUW 表时,您需要注意 DB2 页面大小。IBM DB2 LUW 的最大行长度 (MRL) 取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。表中所有列的长度都不能超出上述限制。如果表中包含 BLOB 或 CLOB 列,则使用 LOB 定位器而不是直接使用 BLOB 或 CLOB 数据计算行长度。有关详细信息,请参见 IBM DB2 LUW 文档。
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) |
IBM DB2 LUW 值可比 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 之间。IBM DB2 LUW DECIMAL 的最大精度为 31。 |
DECIMAL(p>=32,s) |
精度大于 31 的任何 SQL Anywhere DECIMAL 数据都不能同步到 IBM DB2 LUW。 |
|
DOUBLE |
DOUBLE |
DOUBLE 是一种需要舍入的不精确的数字数据类型。使用不同类型的计算机时,DOUBLE 的基础存储经常不同,从而导致不同的舍入。因为主键查找等同性,所以在主键中使用 DOUBLE 是不恰当的选择。同步环境中尤其如此,因为统一数据库经常运行在与远程数据库不同的硬件上。 |
FLOAT(1-24) |
REAL |
如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,FLOAT 可能会引起问题。iAnywhere Solutions 并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。 |
FLOAT(25-53) |
DOUBLE |
如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,FLOAT 可能会引起问题。iAnywhere Solutions 并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。 |
IMAGE |
BLOB(n) |
|
INTEGER |
INTEGER |
|
LONG BINARY |
BLOB(n) |
|
LONG NVARCHAR |
CLOB(n) |
IBM DB2 LUW 中没有相应的数据类型。如果 IBM DB2 LUW 字符集是 Unicode,则 SQL Anywhere LONG NVARCHAR 可同步到 IBM DB2 CLOB。UltraLite 没有 LONG NVARCHAR。 |
LONG VARBIT |
CLOB(n) |
|
LONG VARCHAR |
CLOB(n) |
|
MONEY |
DECIMAL(19.4) |
|
NCHAR(c) |
VARCHAR(n) 或 CLOB(n) |
IBM DB2 LUW 中没有相应的数据类型。如果 IBM DB2 LUW 字符集是 Unicode,则 NCHAR 可同步到 IBM DB2 LUW VARCHAR 或 CLOB。SQL Anywhere NCHAR 的大小是字符数,IBM DB2 LUW 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) |
IBM DB2 LUW 中没有相应的数据类型。 |
|
NTEXT |
CLOB(n) |
IBM DB2 LUW 中没有相应的数据类型。如果 IBM DB2 LUW 字符集是 Unicode,则 NTEXT 可同步到 IBM DB2 LUW CLOB。 |
NVARCHAR(c) |
VARCHAR(n) 或 CLOB(n) |
IBM DB2 LUW 中没有相应的数据类型。如果 IBM DB2 LUW 字符集是 Unicode,则 NVARCHAR 可同步到 IBM DB2 LUW VARCHAR 或 CLOB。SQL Anywhere NVARCHAR 的大小是字符数,IBM DB2 LUW VARCHAR 的大小是字节数。如果映射到 VARCHAR,则 NVARCHAR 的总字节数不能大于 MRL。否则,NVARCHAR 应映射到 CLOB。NVARCHAR(c) 中的字节数很难计算,但可以近似为 c=n/4。通常,如果 c 小于 MRL/4,则映射到 VARCHAR(n);如果 c 大于或等于 MRL/4,则映射到 CLOB(n)。 |
REAL |
REAL |
如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,REAL 可能会引起问题。iAnywhere Solutions 并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。 |
SMALLDATETIME |
TIMESTAMP |
|
SMALLINT |
SMALLINT |
|
SMALLMONEY |
DECIMAL(10,4) |
|
ST_GEOMETRY |
ST_GEOMETRY |
|
TEXT |
CLOB(n) |
|
TIME |
TIMESTAMP 或 TIME |
带小数秒的 SQL Anywhere 和 UltraLite TIME 值需要 IBM DB2 LUW TIMESTAMP。小数秒始终为零的 SQL Anywhere 和 UltraLite 时间值可以使用 IBM DB2 TIME。要保持时间列的精度,MobiLink 服务器应始终将 TIME 列与 ODBC SQL_TYPE_TIMESTAMP 数据类型绑定在一起。当统一数据库在 DB2 9.7 服务器上运行时,您可能需要使用 DB2 转换函数明确转换 TIMESTAMP 与 TIME 之间的列(如果该列是主键的组成部分)。 |
TIMESTAMP |
TIMESTAMP |
|
TIMESTAMP WITH TIME ZONE | VARCHAR(34) | IBM DB2 LUW 中没有对等的数据类型。因此,TIMESTAMP WITH TIME ZONE 列应映射到 VARCHAR(34) 列。上载时,MobiLink 服务器首先使用格式 YYYY-MM-DD HH:NN:SS.SSSSSS [+|-]HH:NN 将数据转换为字符串,然后将其应用到统一数据库。下载时,它会将数据从字符串转换为 TIMESTAMP WITH TIME ZONE。请确保统一数据库中的数据遵从此格式,否则下载将失败。 |
TINYINT |
SMALLINT |
对于下载,IBM DB2 LUW 值必须是非负数。 |
UNIQUEIDENTIFIER |
CHAR(36) |
|
UNIQUEIDENTIFIERSTR |
CHAR(36) |
不建议将 UNIQUEIDENTIFIERSTR 用于 IBM DB2 LUW。请改用 UNIQUEIDENTIFIER。 |
UNSIGNED BIGINT |
DECIMAL(20) |
对于下载,IBM DB2 LUW 值必须是非负数。 |
UNSIGNED INTEGER |
DECIMAL(11) |
对于下载,IBM DB2 LUW 值必须是非负数。 |
UNSIGNED SMALLINT |
DECIMAL(5) |
对于下载,IBM DB2 LUW 值必须是非负数。 |
UNSIGNED TINYINT |
SMALLINT |
对于下载,IBM DB2 LUW 值必须是非负数。 |
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) |
IBM DB2 LUW 值可比 SQL Anywhere 或 UltraLite 值长,因此下载时请确保值不要过大。 |
XML |
CLOB(n) |
下表列出了 IBM DB2 LUW 统一数据类型与 SQL Anywhere 和 UltraLite 远程数据类型的映射关系。例如,统一数据库中类型为 INT 的列对应远程数据库中的类型 INTEGER。
在创建 IBM DB2 LUW 表时,您需要注意页面大小。IBM DB2 LUW 的最大行长度取决于此页面大小:页面大小为 4K 时 MRL 是 4005,8K 时是 8101,16K 时是 16293,32K 时是 32677。表中所有列的长度都不能超出上述限制。如果表中包含 BLOB 或 CLOB 列,则使用 LOB 定位器而不是直接使用 BLOB 或 CLOB 数据计算行长度。有关详细信息,请参见 IBM DB2 LUW 文档。
IBM DB2 LUW 数据类型 | SQL Anywhere 或 UltraLite 数据类型 | 注意 |
---|---|---|
BLOB |
LONG BINARY |
|
BIGINT |
BIGINT |
|
CHAR(n) |
VARCHAR(n) |
SQL Anywhere 中没有与 IBM DB2 LUW CHAR 对等的类型。不应在要同步的统一数据库列中使用 CHAR。如果必须同步 IBM DB2 LUW CHAR 列,请使用 -b 选项运行 MobiLink 服务器。 |
CHAR(n) FOR BIT DATA |
BINARY(n) |
|
CLOB(n) |
LONG VARCHAR |
|
DATE |
DATE |
对于 SQL Anywhere 和 UltraLite,时间值格式必须为 00:00:00。 |
DB2GSE.ST_GEOMETRY |
ST_GEOMETRY |
|
DBCLOB(n) |
LONG VARCHAR |
数据类型 DBCLOB(n) 仅用于双字节字符。SQL Anywhere 没有相对应的数据类型。IBM DB2 LUW 字符集为 Unicode 时,DBCLOB(n) 等同于 CLOB。 |
DECIMAL(p,s) |
DECIMAL(p,s) |
|
DOUBLE |
DOUBLE |
DOUBLE 是一种需要舍入的不精确的数字数据类型。使用不同类型的计算机时,DOUBLE 的基础存储经常不同,从而导致不同的舍入。因为主键查找等同性,所以在主键中使用 DOUBLE 是不恰当的选择。同步环境中尤其如此,因为统一数据库经常运行在与远程数据库不同的硬件上。 |
FLOAT |
DOUBLE |
如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,FLOAT 可能会引起问题。iAnywhere Solutions 并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。 |
GRAPHIC(n) |
VARCHAR(2n) |
IBM DB2 LUW GRAPHIC 会使用空白进行填充,而 SQL Anywhere CHAR 则不会。建议您不要使用此数据类型。 数据类型 GRAPHIC 仅用于双字节字符。SQL Anywhere 没有相对应的数据类型。IBM DB2 LUW 字符集为 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 没有相对应的数据类型。IBM DB2 LUW 字符集为 Unicode 时,LONG VARGRAPHIC 等同于 LONG VARCHAR。 |
NUMERIC(p,s) |
NUMERIC(p,s) |
|
REAL |
REAL |
如果统一数据库和远程数据库不允许存在完全相同(不精确)的值,REAL 可能会引起问题。iAnywhere Solutions 并没有对所有可能的值进行测试,因此,务必要谨慎。为避免出现问题,请不要将这些类型用作主键的一部分。 |
SMALLINT |
SMALLINT |
|
TIME |
TIME |
SQL Anywhere TIME 值中的小数秒值在下载时会被截断。要避免出现问题,请不要使用小数秒。要保持时间列的精度,MobiLink 服务器应始终将 TIME 列与 ODBC SQL_TYPE_TIMESTAMP 数据类型绑定在一起。当统一数据库在 DB2 9.7 服务器上运行时,您可能需要使用 DB2 转换函数明确转换 TIMESTAMP 与 TIME 之间的列(如果该列是主键的组成部分)。 |
TIMESTAMP |
TIMESTAMP |
|
VARCHAR(n) |
VARCHAR(n) |
|
VARCHAR(n) FOR BIT DATA |
VARBINARY(n) |
|
VARGRAPHIC(n) |
VARCHAR(2n) |
数据类型 VARGRAPHIC 仅用于双字节字符。SQL Anywhere 没有相对应的数据类型。IBM DB2 LUW 字符集为 Unicode 时,VARGRAPHIC 等同于 VARCHAR。 |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |