mySQL 5.0.45 LAST_INSERT_ID()和大于signed int的值

时间:2010-08-05 19:43:02

标签: mysql unsigned lastinsertid bigint

我正在尝试对已经移过signed int值2147483647的自动递增索引使用LAST_INSERT_ID。此列是unsigned int。但是,LAST_INSERT_ID()返回无效的负值。研究这个,我发现了一些评论,表明这是这个功能的本质。但我发现它没有正式记录。有些漏洞报告可以追溯到几年前仍然存在。

所以我需要知道这是否实际上是一个已知的错误和/或是否我能做些什么。我是否需要将mySQL升级到更新版本?

2 个答案:

答案 0 :(得分:0)

我对此并不是100%肯定,但由于你只需要ID并且不对它进行任何数学运算,你是否可以将其作为字符串处理并让你的select语句将数字转换为字符串?

答案 1 :(得分:0)

我假设你在问题的评论中使用PHP。 (目前未被标记为“php”相关)。 我只需加2美分

  

我正在尝试对已经移过signed int值2147483647的自动递增索引使用LAST_INSERT_ID。此列是unsigned int。但是,LAST_INSERT_ID()返回无效的负值。研究这个,我发现了一些评论,表明这是这个功能的本质。但我发现它没有正式记录。有些漏洞报告可以追溯到几年前仍然存在。

mySQL LAST_INSERT_ID函数将从AUTO_INCREMENT列的最新 INSERT 返回 ID (在当前连接上)所以,如果你的列是INTEGER UNSIGNED,就像你说的那样,它可以返回大于 2147483647 的值。这是正确的行为。

  

所以我需要知道这是否实际上是一个已知的错误和/或是否我能做些什么。我是否需要将mySQL升级到更新版本?

mySQL数据类型与您选择在 PHP 上使用的表示形式几乎没有关系,因此问题不在 mySQL 服务器中。如果您的 PHP 安装无法处理如此大的数字,那么您可以将其视为string(Shadow Radiance说)。