将Mysql的tinyInt字段类型改为Varchar字段类型



我需要将列类型从tinyInt(用作bool)更改为Varchar,而不会丢失数据。我在堆栈溢出上找到了很多答案,但它们都是用postgres写的,我不知道如何在Mysql中重写它。对于这个堆栈溢出问题的答案如下:

ALTER TABLE mytable ALTER mycolumn TYPE VARCHAR(10) USING CASE WHEN mycolumn=0 THEN 'Something' ELSE 'TEST' END;

在Mysql中类似的逻辑看起来像什么?

您显示的语法在MySQL中没有等效的。在ALTER TABLE中没有办法修改值。MySQL中的ALTER TABLE只会使用内置类型转换转换值。也就是说,整型将被转换为该整型值的字符串格式,就像在字符串表达式中一样。

对于MySQL,你必须这样做:

  1. 添加新列:

    ALTER TABLE mytable ADD COLUMN type2 VARCHAR(10);
    
  2. 回填该列:

    UPDATE mytable SET type2 = CASE `type` WHEN 0 THEN 'Something' ELSE 'TEST' END;
    

    如果表有数百万行,您可能需要批量执行此操作。

  3. 删除旧列,并可选择将新列重命名为旧列的名称:

    ALTER TABLE mytable DROP COLUMN `type`, RENAME COLUMN type2 to `type`;
    

另一种方法是更改列,允许将整数转换为整数值的字符串格式。然后根据需要更新字符串。

ALTER TABLE mytable MODIFY COLUMN `type` VARCHAR(10);
UPDATE mytable SET `type` = CASE `type` WHEN '0' THEN 'Something' ELSE 'TEST' END;

无论哪种方式,请确保先在另一个表上进行测试,然后再在实际表上进行测试。

相关内容

  • 没有找到相关文章

最新更新