1

在我看来,枚举在 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 将返回空(不为空,至少通过 TOAD)。

我尝试选择 DNSType+0、CONCAT(DNSType,'') 和其他所有在枚举上似乎有效的东西,结果是一样的:我阅读的每篇文章都是临时工作的,但在过程中返回空!

我什至尝试过使用局部变量并将 hackEnum 定义为相同的 ENUM 类型。

4

2 回答 2

4

我遇到了完全相同的问题 - 我正在检索一个 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');

虽然在技术上是正确的,但失败了。希望这对您有所帮助。

于 2011-08-05T18:38:07.503 回答
0

只声明你的返回变量,有 varchar(xx);

CREATE TABLE `FrameworkServices` (
  ...
  `DNSType` enum('IP','CNAME') NOT NULL,
  ...
)

declare valor varchar(40);
select DNSType from FrameworkServices into valor; 

而这一切!!

于 2017-08-23T21:02:44.760 回答