DROP TABLE IF EXISTS CountryLanguage;
CREATE TABLE CountryLanguage (
CountryCode CHAR(3) NOT NULL DEFAULT '',
Language CHAR(30) NOT NULL DEFAULT '',
IsOfficial ENUM('True','False') NOT NUll default 'False',
Percentage FLOAT(4,1) NOT NULL DEFAULT '0.0',
PRIMARY KEY (CountryCode,Language)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO CountryLanguage VALUES ('AND','Spanish',0,44.6);
当我输入insert语句时,它给出了一个错误:
'列为IsOfficial'的数据被截断。
当我使用0时它只会出错,它适用于1。
答案 0 :(得分:1)
你的枚举是IsOfficial ENUM(' True',' False')...那么你应该只使用strin' True'或者“假”' (不是布尔概念上相关的)
INSERT INTO CountryLanguage VALUES ('AND','Spanish','False',44.6);
答案 1 :(得分:0)
因为ENUM
type indexes不是从零开始的:
枚举文字的索引值
每个枚举值都有一个索引:
- 列规范中列出的元素分配了索引号,以1开头。
此外,0
具有特殊含义:
空字符串错误值的索引值为0.这意味着您可以使用以下SELECT语句查找分配了无效ENUM值的行:
mysql> SELECT * FROM tbl_name WHERE enum_col=0;
如果您经历了定义和维护ENUM类型的麻烦,您可以使用文本标签。但是,对于一个简单的布尔列,我只使用TINYINT
和0/1值,可能通过TRUE
和FALSE
常量:
DROP TABLE IF EXISTS CountryLanguage;
CREATE TABLE CountryLanguage (
CountryCode CHAR(3) NOT NULL,
Language CHAR(30) NOT NULL,
IsOfficial TINYINT(1) NOT NULL default false,
Percentage FLOAT(4,1) NOT NULL DEFAULT 0.0,
PRIMARY KEY (CountryCode, Language)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO CountryLanguage (CountryCode, Language, IsOfficial, Percentage)
VALUES ('AND', 'Spanish', false, 44.6);
INSERT INTO CountryLanguage (CountryCode, Language, IsOfficial, Percentage)
VALUES ('AND', 'Catalan ', true, 33);