固定点数精度和小数位数
对于固定点数类型,不同的数据库支持不同的最大精度或比例。
如果源固定点数类型支持比目标更大的精度或小数位数值,并且预计非 KEY 列可能的数据截断,则会显示警告消息,并在目标上使用合适的字符串数据类型以避免数据截断。但是,如果为固定点编号类型的 KEY 列预见数据截断,则复制会异常终止并显示相应的错误消息。您必须选择 AUTOSCHEMAOPTIONS TYPEMAP 或使用 AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION 继续。
以下方案介绍了这些选项的使用:
-
如果使用用户指定的选项(
AUTOSCHEMAOPTIONS TYPEMAP或AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION)预见数据截断,则数据将被截断并显示相应的警告消息。例如:
MySQL 的最大小数精度为 65,但 Oracle 为 38。因此,
DECIMAL(65,10)将映射到 Oracle 中的VARCHAR2。如果源刻度大于目标精度,则可以自动调整目标刻度,以保持精度/刻度比。
例如:
使用
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION时,MySQL 的DECIMAL(65,40)将映射到 Oracle 上的NUMBER(38,23),MySQL 的DECIMAL(65,64)将映射到 Oracle 上的NUMBER(38,37)。 -
不带任何显式精度和刻度的
NUMBER类型按以下方式处理:NUMBER类型仅在 Oracle 和 TimesTen 中受支持。在预览发行版中,不支持 TimesTen。如果源数据类型是NUMBER(没有任何显式精度或小数位数),并且目标数据库还支持NUMBER数据类型,则目标上将使用目标NUMBER类型。如果目标数据库不支持
NUMBER数据类型,则会在目标上使用合适的字符串类型,例如VARCHAR或VARCHAR2。示例:
NUMBER(5,-2)映射到DECIMAL(7,0)NUMBER(1,2)映射到DECIMAL(2,2) -
如果源列上使用的精度或刻度大于目标上可以支持的精度或刻度,并且相应的列是键的一部分,则可以在目标上使用字符串类型以避免目标上的数据截断,这可能会击败目标表中的唯一性属性。这可以由
AUTOSCHEMAOPTIONS参数控制。