获取PostgreSQL布尔字段时获取范围错误

时间:2015-10-01 16:30:01

标签: mysql postgresql mysql-workbench

我正在尝试使用MySQL Workbench工具将PostgreSQL数据库转换为MySQL。似乎架构迁移工作正常 - 没有错误,但是当我尝试迁移数据时 - 我得到了大量的错误列表,看起来它们都是关于同样的事情 - Postgres boolean字段被提取为在MySQL中无法保存为TINYINT的极大整数:

ERROR: `mydb`.`my_table`:Range error fetching field 9 (value 140406775873536, target is MYSQL_TYPE_TINY)

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果你们中的一个必须大规模地做,我建议您看一下这个答案以便生成一个批量脚本:

bulk changing column types in MySQL

或仅检查以下脚本:

SELECT 
    CONCAT('ALTER TABLE ',
        TABLE_NAME,
        ' CHANGE COLUMN ',
        COLUMN_NAME,
        ' ',
        column_name,
        ' TARGET_TYPE ',
        CASE
            WHEN IS_NULLABLE = 'NO' THEN ' NOT '
            ELSE ''
        END,
        ' NULL;') AS que
FROM
    information_schema.columns
WHERE
    table_schema = 'MY DB'
    AND data_type = 'SOURCE_TYPE';

答案 1 :(得分:0)

好的,我现在有一个解决方案。

<强>原因:

默认情况下,当使用MySQL Workbench中的向导将数据从Postgres迁移到MySQL时,如果Postgres字段是布尔值,它将在MySQL中创建TINYINT(1)列,这就是我们遇到此错误的原因。

<强>解决方案:

  1. 将布尔字段更改为INT
  2. ALTER TABLE {targetdb {1}} {sample_table {1}}字段.字段CHANGE COLUMN

    1. 使用MySQL Migration向导会成功。

    2. 将字段改回TINYINT(1)。