我正在尝试在已超过有符号整数值 2147483647 的自动递增索引上使用 LAST_INSERT_ID。此列是无符号整数。但是, LAST_INSERT_ID() 返回无效的负值。研究这个,我发现了一些评论表明这是这个函数的本质。但我找不到它正式记录。有一些可以追溯到几年前的错误报告仍然存在。
所以我需要知道这是否真的是一个已知的错误和/或我是否可以对此做些什么。我需要将 mySQL 升级到更新版本吗?
我正在尝试在已超过有符号整数值 2147483647 的自动递增索引上使用 LAST_INSERT_ID。此列是无符号整数。但是, LAST_INSERT_ID() 返回无效的负值。研究这个,我发现了一些评论表明这是这个函数的本质。但我找不到它正式记录。有一些可以追溯到几年前的错误报告仍然存在。
所以我需要知道这是否真的是一个已知的错误和/或我是否可以对此做些什么。我需要将 mySQL 升级到更新版本吗?
我对此不是 100% 确定的,但是由于您只需要 ID 而不需要对其进行任何数学运算,您是否可以将其作为字符串处理并让您的 select 语句将数字转换为字符串?
我假设您从问题的评论中使用 PHP。(当前未标记为“php”相关)。我将在这里添加我的 2 美分
我正在尝试在已超过有符号整数值 2147483647 的自动递增索引上使用 LAST_INSERT_ID。此列是无符号整数。但是, LAST_INSERT_ID() 返回无效的负值。研究这个,我发现了一些评论表明这是这个函数的本质。但我找不到它正式记录。有一些可以追溯到几年前的错误报告仍然存在。
mySQL的LAST_INSERT_ID
函数将从列上的最新 INSERT 返回ID (在当前连接上),因此,如果您的列与您所说的一样,它可能返回大于2147483647的值。这是正确的行为。AUTO_INCREMENT
INTEGER UNSIGNED
所以我需要知道这是否真的是一个已知的错误和/或我是否可以对此做些什么。我需要将 mySQL 升级到更新版本吗?
mySQL 数据类型与您选择在PHP上使用的表示几乎没有关系,因此问题不在mySQL服务器中。如果你的PHP安装不能处理这么大的数字,那么你可以把它当作一个string
(Shadow Radiance 说)。