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

 

Microsoft SQL Server 数据映射

映射到 Microsoft SQL Server 统一数据类型

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

SQL Anywhere 或 UltraLite 数据类型

Microsoft SQL Server 数据类型

注释

BIGINT

BIGINT

BINARY(n<=8000)

VARBINARY(n)

BINARY(n>8000)

VARBINARY(MAX)

BIT

BIT

CHAR(n<=8000)

VARCHAR(n)

CHAR(n>8000)

VARCHAR(MAX)

DATE

DATE

DATETIME

DATETIME2

SQL Server DATETIME2 和 TIME 的值精确到 100 纳秒。但是,TIMESTAMP 和 TIME 的值只精确到 1 微秒。为了成功地同步 DATETIME2 和 TIME,建议您将小数秒舍入到 1 微秒。

DECIMAL(p=<38,s)

DECIMAL(p,s)

SQL Server DECIMAL/NUMERIC 精度范围是从 1 到 38,因此 p 必须小于 39。

DECIMAL(p>38,s)

SQL Server 中没有相应的数据类型。

DOUBLE

FLOAT(53)

FLOAT(p)

FLOAT(p)

IMAGE

VARBINARY(MAX)

INTEGER

INT

LONG BINARY

VARBINARY(MAX)

LONG NVARCHAR

NVARCHAR(MAX)

LONG VARBIT

VARCHAR(MAX)

LONG VARCHAR

VARCHAR(MAX)

MONEY

MONEY

NCHAR(n<=4000)

NVARCHAR(c)

NCHAR(n>4000)

NVARCHAR(MAX)

NTEXT

NVARCHAR(MAX)

NUMERIC(p=<38,s)

NUMERIC(p,s)

SQL Server DECIMAL/NUMERIC 精度范围是从 1 到 38,因此 p 必须小于 39。

NUMERIC(p>38,s)

SQL Server 中没有相应的数据类型。

NVARCHAR(n<=4000)

NVARCHAR(c)

NVARCHAR(n>4000)

NVARCHAR(MAX)

REAL

REAL

SMALLDATETIME

SMALLDATETIME

SQL Anywhere 和 UltraLite SMALLDATETIME 作为 TIMESTAMP 来实现。SQL Server SMALLDATETIME 精确到分钟。29.998 或更低的秒值将向下舍入为最接近的分钟;29.999 或更高的秒值将向上舍入为最接近的分钟。SQL Anywhere 或 UltraLite SMALLDATETIME 精确到微秒。为了成功地进行同步,SQL Anywhere 或 UltraLite SMALLDATETIME 必须舍入到分钟。年份必须在 1900-2078 范围内。

SMALLINT

SMALLINT

SMALLMONEY

SMALLMONEY

TEXT

VARCHAR(MAX)

TIME

TIME

SQL Server DATETIME2 和 TIME 的值精确到 100 纳秒。但是,TIMESTAMP 和 TIME 的值只精确到 1 微秒。为了成功地同步 DATETIME2 和 TIME,建议您将小数秒舍入到 1 微秒。

TIMESTAMP

DATETIME2

SQL Server DATETIME2 和 TIME 的值精确到 100 纳秒。但是,TIMESTAMP 和 TIME 的值只精确到 1 微秒。为了成功地同步 DATETIME2 和 TIME,建议您将小数秒舍入到 1 微秒。

TINYINT

TINYINT

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

UNIQUEIDENTIFIER

UNIQUEIDENTIFIER

UNIQUEIDENTIFIERSTR

UNIQUEIDENTIFIER

UNSIGNED BIGINT

NUMERIC(20)

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

UNSIGNED INTEGER

NUMERIC(11)

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

UNSIGNED TINYINT

TINYINT

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

UNSIGNED SMALLINT

INT

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

VARBINARY(n<=8000)

VARBINARY(n)

VARBINARY(n>8000)

VARBINARY(MAX)

VARBIT(n<=8000)

VARCHAR(n)

VARBIT(n>8000)

VARCHAR(MAX)

VARCHAR(n<=8000)

VARCHAR(c)

VARCHAR(n>8000)

VARCHAR(MAX)

XML

XML 或 VARCHAR(MAX)

对于 SQL Server 2005,使用 XML。对于其它版本,请使用 VARCHAR(MAX)。

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

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

Microsoft SQL Server 数据类型 SQL Anywhere 或 UltraLite 数据类型 注释

BIGINT

BIGINT

BINARY(n)

BINARY(n)

BIT

BIT

CHAR(n)

VARCHAR(n)

Microsoft SQL Server 的 CHAR 列以空白填补。缺省情况下,SQL Anywhere 的 CHAR 列不是用空白添补的,它等同于 VARCHAR 列。所以,应避免在 Microsoft SQL Server 的同步表中使用 CHAR 数据类型。如果必须在 Microsoft SQL Server 统一数据库中使用 CHAR 数据类型,请使用 -b 命令行选项运行 MobiLink 服务器,以帮助解决 SQL Anywhere CHAR 与非 SQL Anywhere CHAR 之间的不同。

DATE

DATE

DATETIME

TIMESTAMP 或 DATETIME

SQL Server DATETIME 值精确到 1/300 秒。小数秒的最后一位数始终为 0、3 或 6。其它数字将舍入为这三个数之一,即 0 和 1 舍入为 0,2、3 和 4 舍入为 3,5、6、7 和 8 舍入为 6,9 舍入为 10。下载时,SQL Anywhere 会保留 SQL Server 的原始值,但上载时,这些值可能与原始值不完全一致。如果 DATETIME 用于主键,冲突解决可能会失败。为了成功同步 DATETIME,您应将小数秒舍入到 10 毫秒。年份必须在 1753-9999 范围内。

DATETIME2

TIMESTAMP

SQL Server DATETIME2 和 TIME 的值精确到 100 纳秒。但是,TIMESTAMP 和 TIME 的值只精确到 1 微秒。为了成功地同步 DATETIME2 和 TIME,建议您将小数秒舍入到 1 微秒。

DECIMAL(p,s)

DECIMAL(p,s)

FLOAT(p)

FLOAT(p)

IMAGE

LONG BINARY

INT

INT

MONEY

MONEY

NCHAR(n)

NVARCHAR(c)

在 UltraLite 中不可用。

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

NTEXT

LONG NVARCHAR

在 UltraLite 中不可用。

NVARCHAR(c)

NVARCHAR(c)

在 UltraLite 中不可用。

NVARCHAR(MAX)

LONG NVARCHAR

NUMERIC(p,s)

NUMERIC(p,s)

REAL

REAL

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

SMALLDATETIME

SMALLDATETIME

SQL Anywhere 和 UltraLite SMALLDATETIME 作为 TIMESTAMP 来实现。SQL Server SMALLDATETIME 精确到分钟。29.998 或更低的秒值将向下舍入为最接近的分钟;29.999 或更高的秒值将向上舍入为最接近的分钟。SQL Anywhere 或 UltraLite SMALLDATETIME 精确到微秒。为了成功地进行同步,SQL Anywhere 或 UltraLite SMALLDATETIME 必须舍入到分钟。年份必须在 1900-2078 范围内。

SMALLINT

SMALLINT

SMALLMONEY

SMALLMONEY

TEXT

LONG VARCHAR

TIME

TIME

SQL Server DATETIME2 和 TIME 的值精确到 100 纳秒。但是,TIMESTAMP 和 TIME 的值只精确到 1 微秒。为了成功地同步 DATETIME2 和 TIME,建议您将小数秒舍入到 1 微秒。

TIMESTAMP

VARBINARY(8)

在 Microsoft SQL Server 内,TIMESTAMP 是一个二进制计数器,它会随行的每一次更改而相应递增。因此,每个表只能包含一个 TIMESTAMP 列,并且对其进行同步没有任何意义。如果必须对其进行同步,请将其映射到 SQL Anywhere 或 UltraLite 中的 VARBINARY(8) 数据类型。

不能显式地插入或更新时间戳列,因为它由服务器进行维护。当您为含有这种列的表实现上载脚本时,请牢记这一点。

TINYINT

TINYINT

UNIQUEIDENTIFIER

UNIQUEIDENTIFIER

VARBINARY(n)

VARBINARY(n)

VARBINARY(MAX)

LONG BINARY

VARCHAR(n)

VARCHAR(n)

VARCHAR(MAX)

LONG VARCHAR

XML

XML