MySQL错误1265数据被截断为枚举

时间:2017-08-21 18:09:18

标签: mysql enums

我在MySQL中有一个存储过程,它有一个名为log_level的枚举,其中包含一些值。

..

DECLARE log_level ENUM('none','some','errors','debug') DEFAULT 1;

SET log_level = 0; 

..

给出错误:

enter image description here

如果我将其更改为:

..

DECLARE log_level ENUM('none','some','errors','debug') DEFAULT log_level=1;

SET log_level = 0; 

..

它给出错误:

enter image description here

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

当我做`

时,我发生了同样的问题
  

ALTER or INSERT

`信息。

我通过

修复了
  

UPDATE TABLE t SET t.fieldName = NULL

这解决了我的问题。

答案 1 :(得分:0)

MySQL枚举的工作方式不同于C / C ++的等效方式。 log_level被声明为字符串的枚举,因此它实际上希望将字符串作为值。默认值“ 1”也没有多大意义。

正确的语法是:

DECLARE log_level ENUM('none','some','errors','debug') DEFAULT 'some';

SET log_level = 'none'; 

如果您尝试为枚举分配不存在的值(例如,用空字符串代替实际的NULL值),则会出现相同的错误1265。

旁注:内部数据库使用整数值,但是SQL语言完全隐藏了这些细节。