我在MySQL中有一个存储过程,它有一个名为log_level的枚举,其中包含一些值。
..
DECLARE log_level ENUM('none','some','errors','debug') DEFAULT 1;
SET log_level = 0;
..
给出错误:
如果我将其更改为:
..
DECLARE log_level ENUM('none','some','errors','debug') DEFAULT log_level=1;
SET log_level = 0;
..
它给出错误:
如何解决此问题?
答案 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语言完全隐藏了这些细节。