在我看来,枚举在MySQL中是破坏的,至少在版本5.0.51a-24 + lenny5(Debian)上是如此。我有一个简单的查找表,其中包含一个枚举字段:
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;
但是,如果我将EXACT相同的代码放入过程中,@ hackEnum将返回空(非空,至少通过TOAD)。
我已经尝试选择DNSType + 0,CONCAT(DNSType,'')以及其他似乎在枚举上有效的内容,结果是相同的: 我阅读的每篇文章都是ad-hoc,但在Procedure!中返回为空!
我甚至尝试使用局部变量并将hackEnum定义为相同的ENUM类型。
答案 0 :(得分:3)
我遇到了完全相同的问题 - 我正在检索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');
虽然技术上正确,但失败了。希望这会对你有所帮助。
答案 1 :(得分:0)
只声明你的return变量,有varchar(xx);
CREATE TABLE `FrameworkServices` (
...
`DNSType` enum('IP','CNAME') NOT NULL,
...
)
declare valor varchar(40);
select DNSType from FrameworkServices into valor;
这一切!!