在我看来,枚举在 MySQL 中被破坏了,至少在版本 5.0.51a-24+lenny5 (Debian) 上是这样。我有一个简单的查找表,其中包含一个枚举字段:
CREATE TABLE `FrameworkServices` (
...
`DNSType` enum('IP','CNAME') NOT NULL,
...
)
临时,我可以毫无问题地运行以下命令:
SELECT DNSType, CNameOrIP INTO @hackEnum, @ipAddress
FROM FrameworkServices WHERE FrameworkTypeId = 1 LIMIT 1;
SELECT @hackEnum, @ipAddress;
但是,如果我将完全相同的代码放入过程中,@hackEnum 返回空(不为 null,至少通过 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');
虽然技术上是正确的,但失败了。希望这对您有帮助。
关于mysql - 如何在 MySQL 过程中获取 ENUM 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737137/