Преобразование BIGINT без знака в INT

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

3 ответов


в этой статье Кажется, есть решение:

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

CREATE FUNCTION BigToInt (n BIGINT) возвращает целое число N;

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

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


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

ALTER TABLE table_name MODIFY column_name INTEGER;

спас меня от необходимости переписывать 15 внешних ключей.


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

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