无法在mysql中使用枚举

时间:2017-04-01 16:36:59

标签: mysql enums

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。

2 个答案:

答案 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值,可能通过TRUEFALSE常量:

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);