15

我知道将某些数据从较大的数据类型转换为较小的数据类型是非正统的并且具有潜在的危险。但是,在这种情况下,列的值极不可能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. 例如,在 an 的最大值处截取列INT并返回该值。

现在,我将在拉回值后更改数据类型。但我想知道如何在 SQL 中做到这一点。

4

3 回答 3

9

这篇文章似乎有一个解决方案:

创建将执行转换的函数:

CREATE FUNCTION BigToInt (n BIGINT) 返回整数 返回 n;

如您所见,该函数非常简短:它接受一个 BIGINT 并立即将其作为普通整数返回。然而,这样做的一个后果是一些数据将被截断为 Int 的最大可能值。

(大概您可以将“未签名”添加到签名中 - 如果没有,您仍然可以将其与您已经拥有的演员组合,以删除未签名的部分)。

于 2012-07-21T20:03:32.533 回答
1

如果您尝试以这种方式创建函数,您将收到此错误:

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

于 2014-05-29T13:35:47.543 回答
-1

不幸的是,我无权在我正在工作的数据库上创建函数,所以在尝试了一些可行的方法之后:

ALTER TABLE table_name MODIFY column_name INTEGER;

让我不必重写 15 个外键。

于 2015-03-18T18:28:57.453 回答