mysql Ver 15.1 Distrib 10.2.6-MariaDB
我在执行O'Reilly书"Learning 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;
它失败: 错误 1265 (01000(:第 1 行"濒危"列的数据被截断
数据类型保持 bit(1(。 ALTER 语句有什么问题?
根本无法使用 ALTER 语句执行此操作吗? 我使用两个单独的 ALTER 语句进行了更改:删除列,然后添加列。
BIT(1)
和ENUM
有些不同。 我建议你分多个步骤进行。 但首先,我建议你的ENUM
NOT 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'
转换为"濒危"的特定级别。