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