首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取PostgreSQL布尔值字段时出现范围错误

获取PostgreSQL布尔值字段时出现范围错误
EN

Stack Overflow用户
提问于 2015-10-02 00:30:01
回答 2查看 377关注 0票数 1

我正在尝试使用MySQL工作台工具将PostgreSQL数据库转换为MySQL。模式迁移似乎工作得很好-没有错误,但当我尝试迁移数据时-我得到了大量的错误列表,看起来它们都是关于同一件事- Postgres boolean字段被提取为非常大的整数,不能保存为MySQL中的TINYINT

代码语言:javascript
运行
复制
ERROR: `mydb`.`my_table`:Range error fetching field 9 (value 140406775873536, target is MYSQL_TYPE_TINY)

有什么办法可以解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2019-04-18 19:09:31

如果你们中的一个人不得不大规模地做这件事,我建议你们看看这个答案,以便生成一个批量脚本:

bulk changing column types in MySQL

或者只需检查下面的脚本:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2016-02-29 14:51:34

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

原因:

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

解决方案:

  1. 将布尔字段更改为INT

ALTER TABLEtargetdb.sample_tableCHANGE COLUMNfieldfieldINT NULL DEFAULT '1' COMMENT '' ;

  1. 使用MySQL迁移向导会将该字段重新设置为TINYINT(1)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32892513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档