I know it is unorthodox and potentially dangerous to want to convert something from a larger to a smaller sized data type. However, in this case, it is extremely unlikely that t
I unfortunately did not have the right to create functions on the DB where I was working, so after trying a few things this worked:
ALTER TABLE table_name MODIFY column_name INTEGER;
Saved me having to rewrite 15 foreign keys.
this article seems to have a solution:
Create the function that will perform the conversion:
CREATE FUNCTION BigToInt (n BIGINT) RETURNS INTEGER RETURN n;
As you can see, the function is very short and simple: It takes a BIGINT and immediately returns it as an ordinary integer. However, one consequence of this is that some of the data will be truncated down to the largest possible value for Int.
(presumably you can add "UNSIGNED" to the signature - if not you can still combine it with the cast you already have that removes the unsigned part).
If you try to create the function that way, you will get this error:
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)
See this link for details on how to resolve it:
http://dev.mysql.com/doc/refman/5.0/en/stored-programs-logging.html