首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将BIGINT无符号转换为INT

问将BIGINT无符号转换为INT
EN

Stack Overflow用户
提问于 2012-07-22 03:25:44
回答 3查看 14.8K关注 0票数 14

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

所以,使用MySQL,我正在读取表结构。在阅读information_schema.columns.ordinal_position列时,我意识到它的类型是BIGINT UNSIGNED。现在,为了我的处理目的,我想把它作为一个INT。我想在SQL中强制转换/转换类型。

显然,CAST和CONVERT只允许我更改数据类型的符号。

代码语言:javascript
复制
SELECT CAST(ordinal_position AS SIGNED)
FROM information_schema.columns

我希望该列特别作为INT返回。例如,在INT的最大值处对列进行斩波并返回该值。

现在,我只需要在取回该值之后更改数据类型。但我想知道如何在SQL中实现它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-22 04:03:33

this article似乎有一个解决方案:

创建将执行转换的函数:

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

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

(假设您可以将" unsigned“添加到签名中-如果不是这样,您仍然可以将其与您已有的删除未签名部分的造型组合在一起)。

票数 9
EN

Stack Overflow用户

发布于 2014-05-29 21:35:48

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

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2015-03-19 02:28:57

不幸的是,我没有在我工作的DB上创建函数的权限,所以在尝试了几种方法之后,它就起作用了:

代码语言:javascript
复制
ALTER TABLE table_name MODIFY column_name INTEGER;

省去了我重写15个外键的麻烦。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11595217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档