我知道想要将某些东西从较大的数据类型转换为较小的数据类型是非正统的并且有潜在危险。但是,在这种情况下,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中做到这一点。
答案 0 :(得分:6)
this article似乎有一个解决方案:
创建将执行转换的功能:
创建功能BigToInt(n BIGINT)返回INTEGER RETURN n;
正如您所看到的,该功能非常简短:它需要一个 BIGINT并立即将其作为普通整数返回。但是,一个 这样做的结果是一些数据将被截断为 Int。
的最大可能值
(大概你可以在签名上添加“UNSIGNED” - 如果不是,你仍然可以将它与已经删除未签名部分的演员表合并。)
答案 1 :(得分:1)
我很遗憾没有权利在我工作的数据库上创建函数,所以在尝试了一些有用之后:
ALTER TABLE table_name MODIFY column_name INTEGER;
保存我不得不重写15个外键。
答案 2 :(得分:0)
如果您尝试以这种方式创建函数,则会出现此错误:
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