在mysql / MariaDB中将BIT列修改为ENUM

时间:2017-06-06 18:49:05

标签: mysql mariadb

mysql Ver 15.1 Distrib 10.2.6-MariaDB

我在O'Reilly的书“学习MySQL和MariaDB”中遇到了执行UPDATE语句的问题。代码在第5章 - 第218页&我正在阅读的电子书中有219本。

表“birds_new”中的“危险”字段是bit(1)类型。目的是将类型更改为ENUM。

alter table birds_new
modify column endangered
enum ('Extinct', 'Extinct in Wild', 'Threatened - Critically Endangered',
'Threatened - Endangered', 'Threatened - Vulnerable', 
'Lower Risk - Conservation Dependent', 'Lower Risk - Near Threatened',
'Lower Risk - Least Concern')
after family_id;

失败了: ERROR 1265(01000):数据在第1行截断“危险”列

数据类型仍为位(1)。 ALTER声明有什么问题?
使用ALTER语句是否根本无法做到这一点? 我用两个单独的ALTER语句进行了更改:DROP COLUMN,然后是ADD COLUMN。

1 个答案:

答案 0 :(得分:0)

BIT(1)ENUM有些不同。我建议你分多步完成。但首先,我建议您ENUMNOT NULL,并且有unknown(或其他类似内容)的第一个选项。你不也需要'不濒危'吗?

ALTER TABLE birds_new
    CHANGE COLUMN endangered old_end BIT(1) ...,
    ADD COLUMN endangered ENUM 
           ('unknown, 'Extinct', ..., 'Not endangered') NOT NULL;

UPDATE birds_new
    SET endangered = IF(old_end, 'unknown', 'Not endangered')

ALTER TABLE birds_new
    DROP COLUMN old_end;

然后,您需要使用一些代码将'unknown'转换为“濒危”的特定级别。