CodeIgniter продолжает вставлять 2147483647 для значений int


Каждый раз, когда я пытаюсь сохранить id 1008218499200959 или любое другое "длинное" значение int в базе данных, оно хранится как 2147483647, и у меня есть длина данных, установленная в 20, так что длина не должна была быть проблемой, я думаю.

Это проблема с CodeIgniter или базой данных?

Позже я исправил это, изменив тип данных на varchar, но мне все равно хотелось бы знать, почему он ведет себя таким образом. Спасибо.

-- структура таблицы для таблицы applicants

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;`
3 3

3 ответа:

Проблема с MySQL, основанной на типе идентификатора, который вы определили. Самое большое значение int - 2147483647. Проверьте их документы: https://dev.mysql.com/doc/refman/5.5/en/integer-types.html

Другие варианты:

  • подписанный BIGINT может доставить вас на номер 9223372036854775807
  • неподписанный BIGINT может доставить вас в 18446744073709551615
  • максимальное число цифр для десятичной системы счисления равно 65

(см. https://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html для более подробной информации).

Это проблема базы данных. Это самое большое целое число, и вы пытаетесь ввести большее значение. Значение должно быть decimal(20), а не int(20).

Примечание: Codeigniter может иметь свою собственную проблему с этим.

На самом деле, когда мы создаем БД, мы никогда не даем значения int. INT использовать 4Bytes хранения для хранения значения, а также использовать максимальное значение как 2147483647.

Вы можете выбрать два варианта

  1. удалить длину из int. (Просто Поместите int)
  2. Или Использовать decimal. Таким образом, вы также можете определить длину (decimal(20))