我知道想要将数据类型从较大的数据类型转换为较小的数据类型是非正统的,并且具有潜在的危险。但是,在这种情况下,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中实现它。
发布于 2012-07-22 04:03:33
this article似乎有一个解决方案:
创建将执行转换的函数:
CREATE FUNCTION BigToInt (n BIGINT)返回整数返回n;
正如您所看到的,该函数非常简短和简单:它接受一个BIGINT,并立即将其作为一个普通整数返回。然而,这样做的一个后果是,一些数据将被截断为Int的最大可能值。
(假设您可以将" unsigned“添加到签名中-如果不是这样,您仍然可以将其与您已有的删除未签名部分的造型组合在一起)。
发布于 2014-05-29 21:35:48
如果您尝试以这种方式创建函数,您将得到以下错误:
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
发布于 2015-03-19 02:28:57
不幸的是,我没有在我工作的DB上创建函数的权限,所以在尝试了几种方法之后,它就起作用了:
ALTER TABLE table_name MODIFY column_name INTEGER;省去了我重写15个外键的麻烦。
https://stackoverflow.com/questions/11595217
复制相似问题