我正在尝试使用MySQL工作台工具将PostgreSQL数据库转换为MySQL。模式迁移似乎工作得很好-没有错误,但当我尝试迁移数据时-我得到了大量的错误列表,看起来它们都是关于同一件事- Postgres boolean字段被提取为非常大的整数,不能保存为MySQL中的TINYINT:
ERROR: `mydb`.`my_table`:Range error fetching field 9 (value 140406775873536, target is MYSQL_TYPE_TINY)有什么办法可以解决这个问题吗?
发布于 2019-04-18 19:09:31
如果你们中的一个人不得不大规模地做这件事,我建议你们看看这个答案,以便生成一个批量脚本:
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';发布于 2016-02-29 14:51:34
好了,我现在有了一个解决方案。
原因:
默认情况下,当使用MySQL工作台中的向导将数据从Postgres迁移到MySQL时,如果Postgres字段是布尔值,它将在MySQL中创建TINYINT(1)列,这就是我们遇到此错误的原因。
解决方案:
ALTER TABLEtargetdb.sample_tableCHANGE COLUMNfieldfieldINT NULL DEFAULT '1' COMMENT '' ;
https://stackoverflow.com/questions/32892513
复制相似问题