Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » Sybase Open Client API » 数据类型映射

 

数据类型映射中的范围限制

某些数据类型在 SQL Anywhere 中与在 Open Client 中的范围不同。这种情况下,在检索或插入数据过程中可能会发生溢出错误。

下表列出了可映射到 SQL Anywhere 数据类型但对可能值范围具有某些限制的 Open Client 应用程序数据类型。

在多数情况下,Open Client 数据类型会映射到可能值范围更大的 SQL Anywhere 数据类型。因此,可能会出现这种情况:向 SQL Anywhere 传递的值被接受并存储在数据库中,而这个值由于过大而无法被 Open Client 应用程序读取。

数据类型 Open Client 下限 Open Client 上限 SQL Anywhere 可能值范围下限 SQL Anywhere 可能值范围上限
MONEY -922 377 203 685 477.5808 922 377 203 685 477.5807 -1e15 + 0.0001 1e15 - 0.0001
SMALLMONEY -214 748.3648 214 748.3647 -214 748.3648 214 748.3647
DATETIME Jan 1, 1753 Dec 31, 9999 Jan 1, 0001 Dec 31, 9999
SMALLDATETIME Jan 1, 1900 June 6, 2079 March 1, 1600 Dec 31, 7910
示例

例如,Open Client MONEY 和 SMALLMONEY 数据类型不会跨越它们底层的 SQL Anywhere 实现的整个数值范围。因此,SQL Anywhere 列中的值有可能会超出 Open Client 数据类型 MONEY 的界限。当客户端通过 SQL Anywhere 读取这种违规值时,就会产生错误。

时间戳

当 Open Client TIMESTAMP 值在 SQL Anywhere 中传递时,该数据类型的 SQL Anywhere 实现与它的 Adaptive Server Enterprise 实现不同。在 SQL Anywhere 中,该值被映射到 SQL Anywhere DATETIME 数据类型。在 SQL Anywhere 中,缺省值是 NULL,而且不保证其唯一性。而 Adaptive Server Enterprise 可确保该值会单调递增,从而确保其唯一性。

相比之下,SQL Anywhere TIMESTAMP 数据类型包含年、月、日、小时、分钟、秒和毫秒信息。另外,DATETIME 数据类型的可能值范围要大于由 SQL Anywhere 映射来的 Open Client 数据类型的可能值范围。