2017-06-06 47 views
0

的MySQL版本15.1 DISTRIB 10.2.6,MariaDB的修改BIT列,ENUM在MySQL/MariaDB的

我遇到了在O'Reilly出版的 「學習MySQL和MariaDB的」 執行一個UPDATE statment問題。代碼在第5章 - 我正在閱讀的電子書的第218頁& 219上。

表「bird_new」中的字段「瀕危」是類型位(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。

+0

我根本不會在這個字段中使用枚舉,因爲這個列表可能會改變 - 這是mysql中a **的一種痛苦。 – Shadow

回答

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'成「瀕危」的具體水平。