在我看来,在MySQL中,至少在5.0.51a-24+lenny5 (Debian)版本中,枚举被破坏了。我有一个简单的查找表,它包含一个enum字段:
CREATE TABLE `FrameworkServices` (
...
`DNSType` enum('IP','CNAME') NOT NULL,
...
)
Ad-hoc,我可以运行以下命令而不会出现问题:
SELECT DNSType, CNameOrIP INTO @hackEnum, @ipAddress
FROM FrameworkServices WHERE FrameworkTypeId = 1 LIMIT 1;
SELECT @hackEnum, @ipAddress;
然而,如果我把完全相同的代码放入一个过程中,@hackEnum返回空(不是空,至少通过TOAD)。
我尝试选择DNSType+0, CONCAT(DNSType, ")和其他似乎对枚举有效的所有内容,结果是相同的:我读过的每一篇文章都是临时的,但在过程中返回空!
我甚至尝试使用局部变量并将hackEnum定义为相同的ENUM类型。
我有完全相同的问题-我正在检索ENUM值,然后通过IF...ELSE...END IF
检查它。它不起作用,让我发疯,不知道为什么不行。解决方案是选择一个char(1),然后将ENUM列值视为字符串:
DECLARE use_free CHAR(1);
SELECT use_free INTO use_free FROM ...;
IF use_free = '1' THEN
<do something>
ELSE
<do something else>
END IF;
我第一次使用:
DECLARE use_free ENUM('0','1');
,虽然技术上是正确的,但失败了。
只声明你的返回变量,有varchar(xx);
CREATE TABLE `FrameworkServices` (
...
`DNSType` enum('IP','CNAME') NOT NULL,
...
)
declare valor varchar(40);
select DNSType from FrameworkServices into valor;
和这一切!!