Неправильное целое число (2147483647) вставляется в MySQL?
Хорошо, поэтому я работал с API веб-интерфейса Steam, у меня есть одно из значений, хранящихся в переменной под названием $steam64
. Когда я использую эту утилиту для ввода кода INSERT в базу данных mysql, она добавляет целое целое число, отличное от того, что хранится в переменной.
$sql_query = "INSERT INTO users_info (steam64) VALUES ('$steam64')";
var_dump($steam64);
возвращает реальный int, так же как и повторяет его. Не слишком уверен в том, что здесь происходит, любая помощь приветствуется.
Ответы
Ответ 1
Вероятно, потому, что вы переносите запрос в двойные кавычки, но переменная находится в одинарных кавычках, поэтому она рассматривается как литерал, а если столбец int, вы получите вместо него 0.
Попробуйте следующее:
$sql_query = "INSERT INTO users_info (steam64) VALUES ('" . $steam64 . "')";
Кроме того, перед тем, как я начну плакать, обязательно прочитайте SQL injection, если вы не дезинфицируете переменные, отправляемые непосредственно в SQL-заявления.
- Обновление -
Основываясь на вашем комментарии о "ценности, сбрасываемой"; число, которое вы пытаетесь вставить, слишком велико для 32-битных систем. Максимальный размер для 32-разрядной версии 4 294 967 295, а максимальный для 64-разрядного - 18 446 744 073 709 551 615. Я бы рекомендовал преобразовать ваш столбец в хешх varchar(100)
, а не в int, или переключиться на 64-битную систему. Отличная статья о max ints здесь, и здесь.
Ответ 2
2147483647 - наибольшее значение int для mysql. Просто измените тип от int до bigint.
Ответ 3
Пока я играл с SQL и MySQL имел ту же проблему, что и тип данных MySQL int.
Изменение типа данных с int на bigint исправлена проблема.
Типы Integer MySQL http://dev.mysql.com/doc/refman/5.7/en/integer-types.html
ALTER TABLE tablename MODIFY columnname BIGINT;
Ответ 4
Integer тип INT - это хранилище размером 4 байта, вы получаете от -2^(4*8-1)=-2147483648
до 2^(4*8-1)-1=2147483647
, когда у вас есть флаги подписан ", если вы измените флаги на без знака у вас будет диапазон от 0
до 2^(4*8)-1
. MySQL поддерживает BIGINT в качестве хранилища 8Bytes. Если вы попытаетесь сохранить значение больше, вы сохраните максимальное значение диапазона
Ответ 5
Перейдите в операции- > параметры таблицы → измените значения приращения на минимальное или любое другое значение, которое вы хотите увеличить.
большая проблема автоинкремента заключается в том, что она начинается с последней записи по ошибке, если ее очень большое значение затем запускает проблему в значение insert.. с нашим предопределенным типом данных
![введите описание изображения здесь]()
Ответ 6
Согласитесь с изменением типа данных в BIGINT из INTEGER. В настоящее время создание веб-приложения с помощью node.js/sequelize ниже рефакторе разрешено сообщение номер телефона из формы реакция-редукция, обработанная до "2147483647":
clientPhone: {
type: DataTypes.BIGINT,
allowNull: true
},
Ответ 7
Наибольшее значение для типа данных INT - 2147483647. Если число, которое вы вставляете, больше, чем 2147483647, это вызовет проблему.
Для решения измените тип данных с INT на BIGINT, поскольку BIGINT имеет максимальное значение 9223372036854775807, это может решить вашу проблему.
Посмотрите на этот сайт:
https://dev.mysql.com/doc/refman/5.7/en/integer-types.html
Ответ 8
Самый простой способ - изменить MySQL "int" на "varchar".
Ответ 9
CREATE TABLE `dvouchers` (
`2147483647` int(3) NOT NULL auto_increment,
`code` varchar(12) NOT NULL default '1',
`type` char(1) NOT NULL default '$',
`count` int(3) unsigned NOT NULL default '0',
`amount` int(3) unsigned default '0',
`notes` text,
`expiryDate` date default NULL,
`fkUserAdminId` int(11) NOT NULL default '0',
PRIMARY KEY (`2147483647`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1;