如何将 Postgresql 布尔值转换为 MySQL Tinyint?
Posted
技术标签:
【中文标题】如何将 Postgresql 布尔值转换为 MySQL Tinyint?【英文标题】:How to Convert Postgresql Boolean to MySQL Tinyint? 【发布时间】:2020-12-10 13:19:57 【问题描述】:我正在尝试将 PostgreSQL 表迁移到包含所有数据的 mysql,但由于有两列,我无法迁移。 这些列在 Postgresql 表中为布尔值,这些列中的值为 TRUE 或 FALSE(它看起来像一个字符串)。我在 MySQL 中创建了一个布尔列,但它不接受 TRUE/FALSE 数据。对于这些 TRUE/FALSE 值,我应该使用什么来代替布尔值?我尝试了 tinyint(4) 但它不起作用(我必须迁移数据,因为它是 TRUE 或 FALSE,而不是 t/f 或 1/0)。
一个例子:
Postgresqltable( id bigserial not null, message_listening boolean, ....... )
Example record: (1, TRUE, .......)
【问题讨论】:
您能用示例记录向我们展示生成的 sql 或 csv 格式吗? @AlexanderDeSousa Postgresqltable(id bigserial not null, message_listening boolean .......) postgresqltable 的示例行:(1, TRUE, ........) 【参考方案1】:将它们迁移为VARCHAR(255)
。然后,对于您想要转换为本机 MySQL TINYINT(1)
的每一列:
TINYINT(1)
的列(例如test
)
发出命令UPDATE tbl SET test = IF( bool_col = 'TRUE', 1, 0 )
,其中bool_col
是您从PostgreSQL 迁移的包含布尔字符串的列
删除bool_col
列
将test
列重命名为bool_col
(或任何您喜欢的名称)
对要转换的每一列重复上述步骤。
【讨论】:
假设用于生成转储的选择可以合并IF
。可能比使用这样的临时列更容易。
如果可以重新转储数据,那肯定是更好的选择。但如果无法再次转储数据,则不是一种选择。以上是关于如何将 Postgresql 布尔值转换为 MySQL Tinyint?的主要内容,如果未能解决你的问题,请参考以下文章
不能将 0 或 1 存储为布尔 laravel postgresql
如何将从函数返回的布尔值分配给 PostgreSQL 9.4 中的变量?