programing

MySQL에 잘못된 정수(2147483647)가 삽입되었습니까?

sourcejob 2022. 10. 4. 23:27
반응형

MySQL에 잘못된 정수(2147483647)가 삽입되었습니까?

좋아요, 그래서 저는 스팀 웹 API를 가지고 놀았습니다, 저는 변수 안에 저장된 값 중 하나를 가지고 있습니다.$steam64이 코드 스니퍼를 사용하여 mysql 데이터베이스에 삽입하면 변수에 저장되어 있는 것과 완전히 다른 정수가 삽입됩니다.

$sql_query = "INSERT INTO users_info (steam64) VALUES ('$steam64')";

var_dump($steam64);실제 int를 반환하고 에코도 반환합니다.여기서 무슨 일이 일어나고 있는지는 잘 모르겠지만, 어떤 도움이라도 고맙게 생각합니다.

2147483647은 mysql의 최대 int 값입니다.활자를 int에서 bigint로 바꾸세요.

"값 덤프 중"이라는 코멘트에 따르면 삽입하려는 숫자가 32비트 시스템에 비해 너무 큽니다.32비트의 최대값은 4,294,967,295이고 64비트의 최대값은 18,446,744,073,709,551,615입니다.당신의 칼럼을 다음 컬럼으로 변환하는 것을 추천합니다.varchar(100)int가 아닌 해시 또는 64비트 시스템으로 전환합니다.여기여기 max ints에 대한 훌륭한 기사입니다.


또한, 제가 화내기 전에 SQL 문에 직접 게시되는 변수를 삭제하지 않을 경우를 대비해 SQL 주입에 대해 읽어보십시오.

SQL과 MySQL을 가지고 노는 동안 MySQL int 데이터 타입에 동일한 문제가 발생했습니다.데이터 유형을 int에서 bigint로 수정하는 문제.

MySQL 정수형 http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

ALTER TABLE tablename MODIFY columnname BIGINT; 

간단히 데이터 유형을 INT에서 BIGINT로 변경

데이터 타입 INT 의 최대치는 2147483647 입니다.삽입하는 번호가 2147483647보다 클 경우 문제가 발생합니다.해결책으로 데이터 유형을 INT에서 BIGINT로 변경하면 BIGINT의 최대값이 9223372036854775807이므로 문제를 해결할 수 있습니다.다음 사이트를 참조하십시오.https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

정수형 INT는 4Bytes 스토리지입니다.-2^(4*8-1)=-2147483648로.2^(4*8-1)-1=2147483647"서명된" 플래그가 있는 경우 플래그를 "서명되지 않음"으로 변경하면 범위가 지정됩니다.0로.2^(4*8)-1. MySQL은 8Bytes 스토리지인 BIGINT를 지원합니다.더 큰 값을 저장하려고 하면 범위의 최대값이 저장됩니다.

[ Operations ]-> [ table options ]-> [ increment ]값을 최소값 또는 원하는 값으로 변경합니다.

자동 증가의 큰 문제는 값이 매우 크면 실수로 마지막 엔트리에서 시작하여 삽입값에서 문제가 발생한다는 것입니다.사전 정의된 데이터 유형으로
enter image description here

INTEGER에서 BIGINT로의 데이터 유형 변경에 동의합니다.현재 node.js/sequelize를 사용하여 웹 앱을 구축하고 있는 중 아래 refactor는 '2147483647'로 조작된 react-redux 형식에서 전화번호 포스트를 해결했습니다.

clientPhone: {
    type: DataTypes.BIGINT,
    allowNull: true
},

나도 같은 문제가 있었지만 Varchar는 아니었다.문제는 열 순서가 잘못된 INSERT INTO를 진행 중이었습니다.이것을 보는 사람은 서브쿼리에서 사용하는 콜의 순서일 수 있습니다.

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;

가장 쉬운 방법은 MySQL "int"를 "varchar"로 변경하는 것입니다.

언급URL : https://stackoverflow.com/questions/10255724/incorrect-integer-2147483647-is-inserted-into-mysql

반응형