ПРОБЛЕМА: Mysql конвертирует Enum в Int - PullRequest
8 голосов
/ 24 июля 2011

В моей базе данных очень простая система оценок, где каждый рейтинг хранится в виде enum ('1', '- 1').Чтобы вычислить сумму, я попытался использовать это утверждение:

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

Это прекрасно работает для положительного 1, но по какой-то причине -1 разобрано в 2.

Может кто-нибудь помочь или предложить подстрекательство?

Или я должен сдаться и просто поменять столбец на ПОДПИСАННЫЙ INT (1)?

Ответы [ 5 ]

16 голосов
/ 03 июля 2013

это то, что вы хотите

select enum+0 as enum
12 голосов
/ 29 сентября 2013

Это преобразование в int в MySQL для enum возможно только:

CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1
4 голосов
/ 24 июля 2011

Да, я бы предложил изменить тип столбца. Проблема становится понятной, когда вы читаете документ о типе перечисления (который настоятельно рекомендует не использовать числа в качестве значений перечисления!) - возвращается индекс элемента перечисления, а не само значение перечисления.

0 голосов
/ 17 июня 2013

Хорошо, ребята,

Просто было немного времени с этим.Я узнал, что я не должен использовать ENUM, где целые числа являются значениями.Однако у нас были данные за годы, и я не мог изменить базу данных.

Этот плохой парень работал (превращая его в символ, затем в подписанное целое число).

CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1
0 голосов
/ 01 мая 2012

использование

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