Php CodeIgniter不断为int值插入2147483647

Php CodeIgniter不断为int值插入2147483647,php,mysql,codeigniter,Php,Mysql,Codeigniter,每次我尝试将id 1008218499200959或任何其他“long”int值存储到数据库时,它存储为2147483647,并且我将数据长度设置为20,因此我猜长度不应该是问题所在 这是CodeIgniter还是数据库问题 后来我通过将数据类型更改为varchar来修复它,但我仍然想知道它为什么会这样。多谢各位 --表申请人的表结构 这是一个数据库问题。这是最大的整数,您试图输入一个更大的值。您应该将值定义为decimal(20),而不是int(20) 注意:Codeigniter可能有自己的

每次我尝试将id 1008218499200959或任何其他“long”int值存储到数据库时,它存储为2147483647,并且我将数据长度设置为20,因此我猜长度不应该是问题所在

这是CodeIgniter还是数据库问题

后来我通过将数据类型更改为varchar来修复它,但我仍然想知道它为什么会这样。多谢各位

--表
申请人的表结构

这是一个数据库问题。这是最大的整数,您试图输入一个更大的值。您应该将值定义为
decimal(20)
,而不是
int(20)


注意:Codeigniter可能有自己的问题。

问题在于基于您定义的id类型的MySQL。最大的int值为2147483647。查看他们的文档:

其他选项:

  • 签名的BIGINT可以让您拨打9223372036854775807
  • 未签名的BIGINT可以让您拨打18446744073709551615
  • 小数的最大位数为65

(有关更多详细信息,请参阅)。

实际上,当我们创建DB时,我们从不给
int
赋值
INT
使用
4Bytes
存储值,以及2147483647

你可以选择两个选项

  • int
    中删除长度。(只需放置
    int
  • 或者使用
    十进制
    。因此您也可以定义长度(
    decimal(20)
  • CREATE TABLE IF NOT EXISTS `applicants` (
      `id` int(20) NOT NULL,
      `first_name` varchar(20) NOT NULL,
      `last_name` varchar(30) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;`