如何将 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

如何将Object转换为布尔值?

如何将从函数返回的布尔值分配给 PostgreSQL 9.4 中的变量?

如何使用javascript将字符串数组转换为布尔值? [复制]

Ruby:如何将字符串转换为布尔值

如何将字符串转换为布尔值