问题:Mysql正在将枚举转换为Int

问题:Mysql正在将枚举转换为Int,mysql,enums,int,Mysql,Enums,Int,我的数据库中有一个非常简单的评级系统,每个评级都存储为一个枚举('1','-1')。要计算总数,我尝试使用以下语句: SELECT SUM(CONVERT(rating, SIGNED)) as value from table WHERE _id = 1 这对于正1很好,但由于某些原因,-1被解析为2 有人能帮助或提供煽动吗 或者我应该放弃,只是将列更改为带符号的INT(1)?是的,我建议更改列的类型。当您阅读(强烈建议不要将数字用作枚举值!)时,问题变得很清楚-返回的是枚举项的索引,而不是

我的数据库中有一个非常简单的评级系统,每个评级都存储为一个枚举('1','-1')。要计算总数,我尝试使用以下语句:

SELECT SUM(CONVERT(rating, SIGNED)) as value from table WHERE _id = 1
这对于正1很好,但由于某些原因,-1被解析为2

有人能帮助或提供煽动吗


或者我应该放弃,只是将列更改为带符号的INT(1)?

是的,我建议更改列的类型。当您阅读(强烈建议不要将数字用作枚举值!)时,问题变得很清楚-返回的是枚举项的索引,而不是枚举值本身。

use

SELECT SUM( IF( columnname >0, CAST( columnname AS CHAR ) , NULL ) ) AS vals
FROM `tableName` 
好的,伙计们

只是和这个有点时间。我学到了我不应该使用以整数为值的枚举。然而,我们有多年的数据,我无法更改数据库

这个坏男孩工作了(把它变成一个字符,然后变成一个有符号的整数)

这就是你想要的

select enum+0 as enum

在MySQL中将
enum
转换为
int
,只有在以下情况下才有可能:

CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1

我不会在这里使用enum,但在这种情况下仍然可以获得所需的内容

创建表:

CREATE TABLE test (
    _id INT PRIMARY KEY,
    rating ENUM('1', '-1')
);
INSERT INTO test VALUES(1, "1"), (2, "1"), (3, "-1"), (4, "-1"), (5, "-1");
填充表:

CREATE TABLE test (
    _id INT PRIMARY KEY,
    rating ENUM('1', '-1')
);
INSERT INTO test VALUES(1, "1"), (2, "1"), (3, "-1"), (4, "-1"), (5, "-1");
对枚举执行数学操作会将其转换为索引,因此可以仅缩放结果值:

SELECT 
    SUM(3 - rating * 2)
FROM
    test;

结果:
-1
这对于测试用例是正确的。

好吧,将枚举值更改为
向上
向下
,这将更具描述性!也许吧,但如果他需要做很多这种“评级算术”,它很快就会变得乏味(而且很慢)。。。使用“纯整数值”操作要简单得多。是的,在发布了这个问题后,我继续并更改了它。谢谢你的解释。非常有用嗨!这有什么帮助?请随意多解释一点并使用。