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

 

Oracle 数据映射

映射到 Oracle 统一数据类型

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

SQL Anywhere 或 UltraLite 数据类型

Oracle 数据类型

注释

BIGINT

NUMBER(20)

BINARY(n<=2000)

RAW(n)

BINARY(n>2000)

BLOB

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

BIT

NUMBER(1)

CHAR(n<=4000)

VARCHAR2(n byte)

Oracle VARCHAR2 允许您指定最大字节或字符数。VARCHAR2 数据的最大长度为 4000 字节。如果指定字符数,请确保数据的最大长度不超过 4000 字节。

CHAR(n>4000)

CLOB

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

DATE

DATE2 或 TIMESTAMP

使用没有小数秒的 Oracle DATE 数据类型时,将不会保留 SQL Anywhere 或 UltraLite 小数秒。要避免出现问题,请不要使用小数秒。年份必须在 1-9999 范围内。

使用 Interactive SQL 实用程序时,请先关闭 Return_date_time_as_string 选项,然后再执行 SQL 语句。

DATETIME

DATE2 或 TIMESTAMP

使用没有小数秒的 Oracle DATE 数据类型时,将不会保留 SQL Anywhere 或 UltraLite 小数秒。要避免出现问题,请不要使用小数秒。年份必须在 1-9999 范围内。

使用 Interactive SQL 实用程序时,请先关闭 Return_date_time_as_string 选项,然后再执行 SQL 语句。

DECIMAL(p<=38,s)

NUMBER(p, 0<=s<=38)

在 SQL Anywhere DECIMAL 中,p 介于 1 到 127 之间,s 始终小于或等于 p。在 Oracle NUMBER 中,p 的范围从 1 到 38,s 的范围从 -84 到 127。为了进行同步,Oracle NUMBER 的数值范围必须限制在 0 和 38 之间。

DECIMAL(p>38,s)

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

DOUBLE

DOUBLE PRECISION 或 BINARY_DOUBLE1

Oracle 10g BINARY_FLOAT 和 BINARY_DOUBLE 的特殊值 INF、-INF 和 NAN 不能与 SQL Anywhere 或 UltraLite 同步。

FLOAT(p)

FLOAT(p)

IMAGE

BLOB

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

INTEGER

INT

LONG BINARY

BLOB

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

LONG NVARCHAR

NCLOB

Oracle CLOB 和 NCLOB 最多可以保存 4G 数据。SQL Anywhere LONG VARCHAR 和 LONG NVARCHAR 只能保存最多 2G 数据。

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

LONG VARBIT

CLOB

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

LONG VARCHAR

CLOB

Oracle CLOB 和 NCLOB 最多可以保存 4G 数据。SQL Anywhere LONG VARCHAR 和 LONG NVARCHAR 只能保存最多 2G 数据。

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

MONEY

NUMBER(19,4)

NCHAR(c)

NVARCHAR2(c char) 或 NCLOB

SQL Anywhere NCHAR 和 Oracle NVARCHAR2 的大小表示 Unicode 字符的最大数目。Oracle NVARCHAR2 的数据长度不能超过 4000 字节。很难通过字符大小计算出最大字节长度。通常,如果字符大小超过 1000,则映射到 NCLOB,否则映射到 NVARCHAR2。

NTEXT

NCLOB

Oracle NCLOB 最多可以保存 4G 数据。SQL Anywhere NTEXT(或 LONG NVARCHAR)最多只能保存 2G 数据。

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

NUMERIC(p<=38,s)

NUMBER(p, 0<=s<=38)

在 SQL Anywhere NUMERIC 中,p 介于 1 到 127 之间,s 始终小于或等于 p。在 Oracle NUMBER 中,p 的范围从 1 到 38,s 的范围从 -84 到 127。为了进行同步,Oracle NUMBER 的数值范围必须限制在 0 和 38 之间。

NUMERIC(p>38,s)

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

NVARCHAR

NVARCHAR2(c char) 或 NCLOB

SQL Anywhere NCHAR 和 Oracle NVARCHAR2 的大小表示 Unicode 字符的最大数目。Oracle NVARCHAR2 的数据长度不能超过 4000 字节。很难通过字符大小计算出最大字节长度。通常,如果字符大小超过 1000,则映射到 NCLOB,否则映射到 NVARCHAR2。

REAL

REAL 或 BINARY_FLOAT1

Oracle 10g BINARY_FLOAT 和 BINARY_DOUBLE 的特殊值 INF、-INF 和 NAN 不能与 SQL Anywhere 或 UltraLite 同步。

SMALLDATETIME

DATE2 或 TIMESTAMP

使用没有小数秒的 Oracle DATE 数据类型时,将不会保留 SQL Anywhere 或 UltraLite 小数秒。要避免出现问题,请不要使用小数秒。年份必须在 1-9999 范围内。

SMALLINT

NUMBER(5)

SMALLMONEY

NUMBER(10,4)

TEXT

CLOB

Oracle CLOB 最多可以保存 4G 数据。SQL Anywhere TEXT(或 LONG VARCHAR)最多只能保存 2G 数据。

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

TIME

DATE2 或 TIMESTAMP

使用没有小数秒的 Oracle DATE 数据类型时,将不会保留 SQL Anywhere 或 UltraLite 小数秒。要避免出现问题,请不要使用小数秒。

使用 Interactive SQL 实用程序时,请先关闭 Return_date_time_as_string 选项,然后再执行 SQL 语句。

TIMESTAMP

DATE2 或 TIMESTAMP

使用没有小数秒的 Oracle DATE 数据类型时,将不会保留 SQL Anywhere 或 UltraLite 小数秒。要避免出现问题,请不要使用小数秒。年份必须在 1-9999 范围内。

使用 Interactive SQL 实用程序时,请先关闭 Return_date_time_as_string 选项,然后再执行 SQL 语句。

TINYINT

NUMBER(3)

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

UNSIGNED BIGINT

NUMBER(20)

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

UNSIGNED INTEGER

NUMBER(11)

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

UNSIGNED SMALLINT

NUMBER(5)

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

UNSIGNED TINYINT

NUMBER(3)

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

UNIQUEIDENTIFIER

CHAR(36)

UNIQUEIDENTIFIERSTR

CHAR(36)

建议不要将 UNIQUEIDENTIFIERSTR 用于 Oracle。请改用 UNIQUEIDENTIFIER。

VARBINARY(n<=2000)

RAW(n)

VARBINARY(n>2000)

BLOB

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

VARBIT(n<=4000)

VARCHAR2(n byte)

VARBIT(n>4000)

CLOB

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

VARCHAR(n<=4000)

VARCHAR2(n byte)

Oracle VARCHAR2 允许您指定最大字节或字符数。VARCHAR2 数据的最大长度为 4000 字节。如果指定字符数,请确保数据的最大长度不超过 4000 字节。

VARCHAR(n>4000)

CLOB

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

XML

CLOB

Oracle CLOB 和 NCLOB 最多可以保存 4G 数据。SQL Anywhere XML 最多只能保存 2G 数据。

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

1 仅适用于 Oracle 版本 10g 或更高版本。

2 仅适用于 Oracle 版本 8i。

注意

Oracle 8、8i 和 9i 中不再支持 LONG 数据类型。

要正确同步 Oracle LONG 数据类型,必须在 iAnywhere Solutions Oracle ODBC 驱动程序的 [ODBC 数据源配置] 窗口中选中 [Oracle Force Retrieval Of Long Columns] 选项。

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

下表列出了 Oracle 的统一数据类型与 SQL Anywhere 或 UltraLite 远程数据类型的映射关系。例如,统一数据库中的类型为 LONG 的列对应远程数据库中的类型 LONG VARCHAR。

Oracle 数据类型 SQL Anywhere 或 UltraLite 数据类型 注释

BFILE

LONG BINARY

仅下载。

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

BINARY_DOUBLE

DOUBLE

BINARY_FLOAT 的特殊值 INF、-INF 和 NAN 不能与 SQL Anywhere 或 UltraLite 同步。FLOAT 和 DOUBLE 的精度在 Oracle 中与在 SQL Anywhere 和 UltraLite 中不同。数据的值可能依据精度而更改。

BINARY_FLOAT

REAL

BINARY_FLOAT 的特殊值 INF、-INF 和 NAN 不能与 SQL Anywhere 或 UltraLite 同步。FLOAT 和 DOUBLE 的精度在 Oracle 中与在 SQL Anywhere 和 UltraLite 中不同。数据的值可能依据精度而更改。

BLOB

LONG BINARY

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

CHAR(n byte)

VARCHAR(n)

SQL Anywhere CHAR 和 Oracle CHAR 之间不存在对等关系。SQL Anywhere CHAR 与 VARCHAR 对等。不应在要同步的统一数据库列中使用 CHAR/NCHAR。如果必须使用非 SQL Anywhere CHAR,请用 -b 选项运行 MobiLink 服务器。

SQL Anywhere 或 UltraLite 值可以长于 Oracle 值,因此上载时请确保值不要太大。

CLOB

LONG VARCHAR

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

DATE

TIMESTAMP

年份必须在 1-9999 范围内。

INTERVAL YEAR(year_precision) TO MONTH

在 SQL Anywhere 或 UltraLite 中没有相应的数据类型。

INTERVAL DAY(day_precision) TO SECOND(p)

在 SQL Anywhere 或 UltraLite 中没有相应的数据类型。

LONG

LONG VARCHAR

LONG RAW

LONG BINARY

NCHAR(c char)

NVARCHAR(c)

SQL Anywhere NCHAR 和 Oracle NCHAR 之间不存在对等关系。SQL Anywhere NCHAR 与 NVARCHAR 对等。不应在要同步的统一数据库列中使用 NCHAR。如果必须使用非 SQL Anywhere NCHAR,请用 -b 选项运行 MobiLink 服务器。

SQL Anywhere 或 UltraLite 值可以长于 Oracle 值,因此上载时请确保值不要太大。

NCLOB

LONG NVARCHAR

在 UltraLite 中不可用。

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

NUMBER(p,s)

NUMBER(p,s)

在 SQL Anywhere NUMBER 中,p 在 1 到 127 之间,而 s 始终小于或等于 p。在 Oracle NUMBER 中,p 的范围是从 1 到 38,而 s 的范围是从 -84 到 127。要进行同步,Oracle NUMBER 的数值范围必须在 0 到 38 之间。

NVARCHAR2(c char)

NVARCHAR(c)

在 UltraLite 中不可用。

SQL Anywhere 或 UltraLite 值可以长于 Oracle 值,因此上载时请确保值不要太大。

RAW

BINARY

SQL Anywhere 或 UltraLite 值可以长于 Oracle 值,因此上载时请确保值不要太大。

ROWID

VARCHAR(64)

UROWID 和 ROWID 是只读的,因此不可能进行同步。

TIMESTAMP(p<=6)

TIMESTAMP

p<6 时,您可能需要确保 SQL Anywhere 或 UltraLite 值具有相同的精度。否则,冲突检测可能会失败,也可能出现重复行。年份必须在 1-9999 范围内。

TIMESTAMP(p>6)

在 SQL Anywhere 或 UltraLite 中没有相应的数据类型。

TIMESTAMP(p) WITH LOCAL TIME ZONE

在 SQL Anywhere 或 UltraLite 中没有相应的数据类型。

TIMESTAMP(p) WITH TIME ZONE

在 SQL Anywhere 或 UltraLite 中没有相应的数据类型。

UROWID

VARCHAR(64)

UROWID 和 ROWID 是只读的,因此不可能进行同步。

VARCHAR2(n byte)

VARCHAR(n)

SQL Anywhere 或 UltraLite 值可以长于 Oracle 值,因此上载时请确保值不要太大。