sourcecode

왜 MariaDBB는 smallint에 텍스트를 삽입할 수 있습니까?

copyscript 2022. 9. 14. 22:24
반응형

왜 MariaDBB는 smallint에 텍스트를 삽입할 수 있습니까?

서버 프로바이더가 MYSQL을 MariaDB로 대체했습니다.MYSQL은 다르게 동작하고 있는 것 같습니다."SHOW GLOBAL VARILE LIKE '%version%"를 실행하면 이 서버에 대한 정보가 다음과 같습니다.

Variable_name 값
protocol_version 10
slave_type_informations

버전 5.5.58-MariaDB
version_comment MariaDB Server
version_machine x86_64
version_compile_os Linux

SQL 문 "INSERT INTO years" (년)Year) VALUES('test');"는 Aria 또는 MyISAM 엔진을 사용하여 작은 입력 필드에 0을 삽입합니다.

로컬 개발 시스템에서 "SHOW GLOBAL VARILE LIKE '%version%'를 실행하면 다음과 같은 메시지가 나타납니다.

Variable_name 값
innodb_version 5.6.21
protocol_version 10
slave_type_informations
버전 5.6.21-log
version_comment MySQL Community Server(GPL)
version_machine x86_64
version_compile_os Win64

동일한 SQL 문 "INSERT INTO years"Year) VALUES('test');"는 MYISAM 엔진을 사용하여 오류 코드: 1366 "1행의 'Year' 열에 대해 잘못된 정수 값 'test'를 생성합니다. 이는 예상한 대로이며 기대했던 것입니다.

이게 왜 이런지 누가 좀 밝혀줄 수 있나요?

제대로 된 답변을 드리겠습니다.이는 두 가지 이유로 발생합니다.하나는 유형 변환입니다.주요 원인은 SQL 모드 설정 섹션에 있는 STICT_MODE 설정입니다.

Strict Mode 상태

STRICT_TRANS_TAB 중 적어도1개가 있는 모드LES 또는 STRICT_ALL_TABLES가 네이블로 되어 있는 것을 strict 모드라고 부릅니다.strict 모드가 설정되지 않은 경우(버전 <= MariaDB 10.2.3의 기본값), MariaDB는 잘못된 값(예: 너무 긴 문자열 잘라내기 또는 범위를 벗어난 숫자 값 조정)을 자동으로 조정하여 경고를 생성합니다.

strict 모드를 설정하면(MariaDB 10.2.4에서 디폴트로), 스테이트먼트는 실패하고 에러가 반환됩니다.IGNORE 키워드는 에러를 경고로 변환하기 위해 strict 모드가 설정되어 있는 경우에 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/49198656/why-does-mariadbb-allow-insert-of-text-into-smallint

반응형