Преобразовать BIGINT UNSIGNED в INT

Я знаю, что это неортодоксально и потенциально опасно хотеть конвертировать что-то из более крупного и меньшего размера. Однако в этом случае крайне маловероятно, чтобы значение столбца BIGINT UNSIGNED было больше максимального размера столбца INT.

Итак, используя MySQL, я читаю структуру таблицы. При чтении столбца information_schema.columns.ordinal_position я понял, что он имеет тип BIGINT UNSIGNED. Теперь я хочу, чтобы это было как INT для моих целей обработки. Я хочу преобразовать тип в SQL.

CAST и CONVERT позволяют мне, по-видимому, изменить знак типа данных.

SELECT CAST(ordinal_position AS SIGNED)
FROM information_schema.columns

Я хочу, чтобы столбец был возвращен как INT. Например. нарезать столбец с максимальным значением INT и вернуть это значение.

Теперь я просто изменю тип данных после того, как верну его. Но я хотел бы знать, как это сделать в SQL.

Ответ 1

эта статья, похоже, имеет решение:

Создайте функцию, которая будет выполнять преобразование:

СОЗДАТЬ ФУНКЦИЮ BigToInt (n BIGINT) ВОЗВРАТИТЬ INTEGER RETURN n;

Как вы можете видеть, функция очень короткая и простая: требуется BIGINT и сразу же возвращает его как обычное целое число. Однако один следствием этого является то, что некоторые данные будут усечены до наибольшее возможное значение для Int.

(предположительно вы можете добавить подписи "UNSIGNED" - если вы еще не можете объединить его с литым, который у вас уже есть, который удаляет неподписанную часть).

Ответ 2

Я, к сожалению, не имел права создавать функции в БД, где я работал, поэтому, попробовав несколько вещей, это сработало:

ALTER TABLE table_name MODIFY column_name INTEGER;

Мне удалось переписать 15 внешних ключей.

Ответ 3

Если вы попытаетесь создать функцию таким образом, вы получите эту ошибку:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL,
or READS SQL DATA in its declaration and binary logging is enabled
(you *might* want to use the less safe log_bin_trust_function_creators
variable)

Подробнее о том, как его решить, см. эту ссылку:

http://dev.mysql.com/doc/refman/5.0/en/stored-programs-logging.html