【问题标题】:How to Convert Postgresql Boolean to MySQL Tinyint?如何将 Postgresql 布尔值转换为 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, ........)

标签: mysql postgresql


【解决方案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。可能比使用这样的临时列更容易。
  • 如果可以重新转储数据,那肯定是更好的选择。但如果无法再次转储数据,则不是一种选择。
猜你喜欢
  • 1970-01-01
  • 2022-08-05
  • 2017-03-27
  • 2015-03-26
  • 2012-07-06
  • 2018-12-13
  • 1970-01-01
  • 2015-09-29
  • 2018-07-30
相关资源
最近更新 更多