Liquibase将生成的更改日志中的大整数不准确地填充到表中

时间:2014-10-02 11:41:48

标签: mysql liquibase

我目前正忙着切换到liquibase并使用generateChangelog命令生成我的表和数据以进行安装。但是,在干净的数据库上运行更改集后,数据不是预期的。我已经创建了一个小例子来说明问题。使用了以下MySQL表

CREATE TABLE `test_table` (
  `value1` bigint(20) DEFAULT NULL,
  `value2` bigint(20) DEFAULT NULL,
  `value3` bigint(20) DEFAULT NULL,
  `value4` bigint(20) DEFAULT NULL,
  `value5` bigint(20) DEFAULT NULL,
  `value6` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

该表包含以下条目:

mysql> select * from test_table;
+--------------------+--------------------+--------------------+--------------------+---------------------+---------------------+
| value1             | value2             | value3             | value4             | value5              | value6              |
+--------------------+--------------------+--------------------+--------------------+---------------------+---------------------+
| 900000000000000000 | 900000000000000001 | 999999999999999900 | 999999999999999999 | 1000000000000000001 | 9223372036854775807 |
+--------------------+--------------------+--------------------+--------------------+---------------------+---------------------+
1 row in set (0.00 sec)

使用liquibase generateChangelog命令生成以下更改集:

<changeSet author="support (generated)" id="1412248645392-1">
    <createTable tableName="test_table">
        <column name="value1" type="BIGINT(19)"/>
        <column name="value2" type="BIGINT(19)"/>
        <column name="value3" type="BIGINT(19)"/>
        <column name="value4" type="BIGINT(19)"/>
        <column name="value5" type="BIGINT(19)"/>
        <column name="value6" type="BIGINT(19)"/>
    </createTable>
</changeSet>
<changeSet author="support (generated)" id="1412248645392-2">
    <insert tableName="test_table">
        <column name="value1" valueNumeric="900000000000000000"/>
        <column name="value2" valueNumeric="900000000000000001"/>
        <column name="value3" valueNumeric="999999999999999900"/>
        <column name="value4" valueNumeric="999999999999999999"/>
        <column name="value5" valueNumeric="1000000000000000001"/>
        <column name="value6" valueNumeric="9223372036854775807"/>
    </insert>
</changeSet>

但是,将这些更改集还原到空数据库会错误地填充表,如下所示:

mysql> select * from test_table;
+--------------------+--------------------+--------------------+---------------------+---------------------+---------------------+
| value1             | value2             | value3             | value4              | value5              | value6              |
+--------------------+--------------------+--------------------+---------------------+---------------------+---------------------+
| 900000000000000000 | 900000000000000000 | 999999999999999872 | 1000000000000000000 | 1000000000000000000 | 9223372036854775807 |
+--------------------+--------------------+--------------------+---------------------+---------------------+---------------------+
1 row in set (0.01 sec)

有没有人可能会解释为什么值不正确?我正在使用MySQL 5.5版和Liquibase 3.2.2核心版本。

编辑:现在似乎是通过在列标记中将“valueNumeric”替换为“value”来填充数据,但这并不能解释为什么valueNumeric无法按预期工作。

0 个答案:

没有答案