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 ответа:
Проблема с 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.Вы можете выбрать два варианта
- удалить длину из
int
. (Просто Поместитеint
)- Или Использовать
decimal
. Таким образом, вы также можете определить длину (decimal(20)
)