Преобразование 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