繁体   English   中英

在 Mysql 中将列类型从 tinyInt 更改为 Varchar

[英]ALTER COLUMN TYPE from tinyInt to Varchar in Mysql

我需要在不丢失数据的情况下将列类型从 tinyInt(用作 bool)更改为 Varchar。 我在 stack-overflow 上找到了很多答案,但它们都是用 postgres 编写的,我不知道如何在 Mysql 中重写它。stack-overflow 上这个问题的答案如下所示:

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

类似的逻辑在 Mysql 中看起来如何?

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

对于 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`;

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

ALTER TABLE mytable MODIFY COLUMN `type` VARCHAR(10);

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

无论哪种方式,请务必先在另一张桌子上进行测试,然后再在您的真实桌子上尝试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM