【问题标题】:Convert BIGINT UNSIGNED to INT将 BIGINT UNSIGNED 转换为 INT
【发布时间】:2012-07-20 16:00:15
【问题描述】:

我知道将某些数据类型从较大的数据类型转换为较小的数据类型是非正统的并且具有潜在的危险。但是,在这种情况下,BIGINT UNSIGNED 列的值极不可能大于INT 列的最大大小。

所以,使用 MySQL,我正在读取表结构。在阅读information_schema.columns.ordinal_position 专栏时,我意识到它属于BIGINT UNSIGNED 类型。现在,我希望将其作为INT,而不是用于我的处理目的。我想在 SQL 中转换/转换类型。

CASTCONVERT 显然只允许我更改数据类型的符号。

SELECT CAST(ordinal_position AS SIGNED)
FROM information_schema.columns

我希望该列专门返回为 INT。例如。在 INT 的最大值处截取列并返回该值。

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

【问题讨论】:

    标签: mysql types casting


    【解决方案1】:

    this article好像有解决办法:

    创建将执行转换的函数:

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

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

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

    【讨论】:

    • 不创建函数的替代方法是什么?必须记住在使用后拆除该功能是一件麻烦事。
    【解决方案2】:

    如果你尝试以这种方式创建函数,你会得到这个错误:

    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

    【讨论】:

    • 在这种特殊情况下,修复方法是添加DETERMINISTIC
    【解决方案3】:

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

    ALTER TABLE table_name MODIFY column_name INTEGER;
    

    让我不必重写 15 个外键。

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 2012-04-28
      相关资源
      最近更新 更多