ISSUE: Mysql converting Enum to Int

旧城冷巷雨未停 提交于 2020-01-02 02:37:07

问题


I have a very simple rating system in my database where each rating is stored as an enum('1','-1'). To calculate the total I tried using this statement:

SELECT SUM(CONVERT(rating, SIGNED)) as value from table WHERE _id = 1

This works fine for the positive 1 but for some reason the -1 are parsed out to 2's.

Can anyone help or offer incite?

Or should I give up and just change the column to a SIGNED INT(1)?


回答1:


Yes, I'd suggest to change the type of the column. The issue becomes clear when you read the doc about enum type (which strongly recommends not to use numbers as enumeration values!) - the index of the enum item is returned, not the enum value itself.




回答2:


this is what you want

select enum+0 as enum



回答3:


This conversion to int in MySQL for enum is only possible:

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



回答4:


use

SELECT SUM( IF( columnname >0, CAST( columnname AS CHAR ) , NULL ) ) AS vals
FROM `tableName` 



回答5:


Ok guys,

Just had a bit of a mere of a time with this one. I learned that i shouldn't use ENUMs where integers are the values. However We had years worth of data and i couldn't alter the database.

This bad boy worked (turning it into a character, then into a signed int).

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


来源:https://stackoverflow.com/questions/6803641/issue-mysql-converting-enum-to-int

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!