본문 바로가기
Database/MYSQL

Mysql sql_mode 항목정리

by 반화넬 2018. 5. 8.
반응형

Full List of SQL Modes

• ALLOW_INVALID_DATES
날짜를 완전히 확인하지 마십시오. 달이 1에서 12 사이의 범위에 있고 일의 범위가 1에서 31 사이인지 확인하십시오. 이는 세 개의 다른 필드에서 년, 월, 일을 얻는 웹 응용 프로그램에 유용 할 수 있으며 사용자 날짜 유효성 검사없이 삽입되었습니다. 이 모드는 DATE 및 DATETIME 열에 적용됩니다. 항상 유효한 날짜가 필요한 TIMESTAMP 열은 적용되지 않습니다.
ALLOW_INVALID_DATES가 활성화 된 상태에서 서버는 월 및 일 값이 합법적이어야하며 단순히 각각 1 - 12 및 1 - 31 범위에 있지 않아야합니다. 엄격 모드를 사용하지 않으면 '2004-04-31'과 같은 잘못된 날짜가 '0000-00-00'으로 변환되고 경고가 생성됩니다. 엄격 모드를 사용하면 유효하지 않은 날짜가 오류를 생성합니다. 이러한 날짜를 허용하려면 ALLOW_INVALID_DATES를 사용하십시오

• ANSI_QUOTES

ANSI_QUOTES를 사용하면 큰 따옴표를 사용하여 리터럴 문자열을 인용 할 수 없기 때문에 식별자를 따옴표로 묶어서 (따옴표 문자와 같은) 식별자 따옴표 문자로 사용하고 문자열 인용 부호 문자로 사용하지 마십시오. 그들은 식별자로 해석됩니다

• ERROR_FOR_DIVISION_BY_ZERO

ERROR_FOR_DIVISION_BY_ZERO 모드는 MOD (N, 0)를 포함한 0으로 나누기 처리에 영향을줍니다. 데이터 변경 조작 (INSERT, UPDATE)의 경우, 그 효과는 엄격한 SQL 모드가 사용 가능한지 여부에 달려 있습니다.
this이 모드가 활성화되지 않은 경우, 0으로 나눔은 NULL을 삽입하고 경고를 생성하지 않습니다.
this이 모드를 사용하면 0으로 나누면 NULL이 삽입되고 경고가 표시됩니다.
this이 모드와 엄격 모드를 사용하면 IGNORE가 주어지지 않는 한 0으로 나누면 오류가 발생합니다. INSERT IGNORE 및 UPDATE IGNORE의 경우, 0으로 나눈 값은 NULL을 삽입하고 경고를 생성합니다.
SELECT의 경우 0으로 나누면 NULL을 반환합니다. ERROR_FOR_DIVISION_BY_ZERO를 사용하면 엄격 모드가 활성화되었는지 여부에 관계없이 경고가 생성됩니다.
MySQL 5.6.17부터는 ERROR_FOR_DIVISION_BY_ZERO가 더 이상 사용되지 않으며 sql_mode 값을 포함하도록 설정하면 경고가 생성됩니다.

• HIGH_NOT_PRECEDENCE

NOT 연산자의 우선 순위는 NOT a BETWEEN b AND c와 같은 표현식이 NOT으로 구문 분석되도록합니다 (b와 b b 사이). 일부 이전 버전의 MySQL에서는 표현식이 b와 c의 (아닌) 것으로 구문 분석되었습니다. 이전의 높은 우선 순위 동작은 HIGH_NOT_PRECEDENCE SQL 모드를 활성화하여 얻을 수 있습니다

• IGNORE_SPACE

함수 이름과 (문자.) 사이의 공백을 허용하면 내장 함수 이름이 예약어로 취급되므로 결과적으로 함수 이름과 동일한 식별자를 9.2 절. "스키마 객체 이름 "예를 들어, COUNT () 함수가 있기 때문에 다음 명령문에서 테이블 이름으로 count를 사용하면 오류가 발생합니다.
IGNORE_SPACE SQL 모드는 내장 함수에 적용되며 사용자 정의 함수 나 저장 함수에는 적용되지 않습니다. IGNORE_SPACE가 사용 가능한지 여부에 관계없이 UDF 또는 저장된 함수 이름 뒤에 공백이 있으면 항상 허용됩니다.

• NO_AUTO_CREATE_USER

인증 정보가 지정되어 있지 않으면 GRANT 문이 자동으로 새 사용자를 작성하지 못하도록합니다 (그렇지 않은 경우). 이 명령문은 IDENTIFIED BY 또는 IDENTIFIED WITH를 사용하는 인증 플러그인을 사용하여 비어 있지 않은 암호를 지정해야합니다.


• NO_AUTO_VALUE_ON_ZERO

NO_AUTO_VALUE_ON_ZERO는 AUTO_INCREMENT 컬럼 처리에 영향을줍니다. 일반적으로 NULL 또는 0을 삽입하여 열의 다음 시퀀스 번호를 생성합니다. NO_AUTO_VALUE_ON_ZERO는이 동작을 0으로 억제하여 NULL 만 다음 시퀀스 번호를 생성합니다.
이 모드는 테이블의 AUTO_INCREMENT 컬럼에 0이 저장된 경우 유용 할 수 있습니다. 예를 들어, mysqldump를 사용하여 테이블을 덤프하고 다시로드하는 경우, MySQL은 일반적으로 0 값을 만날 때 새로운 시퀀스 번호를 생성하여 그 결과와 다른 테이블을 생성합니다 (예 : 0을 저장하는 것은 권장되지 않습니다). 버려진 사람. 덤프 파일을 다시로드하기 전에 NO_AUTO_VALUE_ON_ZERO를 사용하면이 문제가 해결됩니다. 이런 이유로, mysqldump는 NO_AUTO_VALUE_ON_ZERO를 가능하게하는 명령문을 출력에 자동으로 포함시킨다.

• NO_BACKSLASH_ESCAPES

문자열 내에서 백 슬래시 문자 (\)를 이스케이프 문자로 사용하지 않습니다. 이 모드를 사용하면 백 슬래시가 다른 것과 마찬가지로 평범한 문자가됩니다.

• NO_DIR_IN_CREATE

테이블을 만들 때 모든 INDEX DIRECTORY 및 DATA DIRECTORY 지시문을 무시하십시오. 이 옵션은 슬레이브 복제 서버에서 유용합니다.

• NO_ENGINE_SUBSTITUTION

CREATE TABLE 또는 ALTER TABLE과 같은 명령문이 비활성화되거나 컴파일되지 않은 스토리지 엔진을 지정할 때 기본 스토리지 엔진의 자동 대체를 제어합니다.
저장소 엔진은 런타임에 플러그 가능하므로 사용할 수없는 엔진은 동일한 방식으로 처리됩니다.
NO_ENGINE_SUBSTITUTION이 비활성화 된 상태에서 CREATE TABLE에 대해 기본 엔진이 사용되며 원하는 엔진을 사용할 수없는 경우 경고가 발생합니다. ALTER TABLE의 경우 경고가 발생하고 테이블은 변경되지 않습니다.
NO_ENGINE_SUBSTITUTION이 활성화되면 오류가 발생하고 원하는 엔진을 사용할 수 없으면 테이블이 생성되거나 변경되지 않습니다.

• NO_FIELD_OPTIONS

SHOW CREATE TABLE의 출력에 MySQL 관련 컬럼 옵션을 출력하지 않는다. 이 모드는 이식성 모드에서 mysqldump에 의해 사용된다.

• NO_KEY_OPTIONS

SHOW CREATE TABLE의 출력에 MySQL 관련 인덱스 옵션을 출력하지 마십시오. 이 모드는 이식성 모드에서 mysqldump에 의해 사용된다.

• NO_TABLE_OPTIONS

SHOW CREATE TABLE의 출력에 MySQL과 같은 테이블 옵션 (ENGINE과 같은)을 출력하지 마십시오. 이 모드는 이식성 모드에서 mysqldump에 의해 사용된다.

• NO_UNSIGNED_SUBTRACTION

UNSIGNED 유형의 정수 값 사이의 뺄셈은 기본적으로 부호없는 결과를 생성합니다. 결과가 부정적 일 경우 오류가 발생합니다.

• NO_ZERO_DATE

NO_ZERO_DATE 모드는 서버가 '0000-00-00'을 유효한 날짜로 허용하는지 여부에 영향을줍니다. 그 효과는 엄격한 SQL 모드가 사용 가능한지에 따라 다릅니다.
this이 모드가 활성화되지 않은 경우 '0000-00-00'이 허용되고 삽입시 경고가 발생하지 않습니다.
this이 모드가 활성화되면 '0000-00-00'이 허용되고 삽입하면 경고가 나타납니다.
this이 모드와 엄격 모드를 사용하면 IGNORE가 주어지지 않는 한 '0000-00-00'은 허용되지 않고 삽입하면 오류가 발생합니다. INSERT IGNORE 및 UPDATE IGNORE의 경우 '0000-00-00'이 허용되고 삽입하면 경고가 생성됩니다.
MySQL 5.6.17부터 NO_ZERO_DATE는 더 이상 사용되지 않으며 sql_mode 값을 포함하도록 설정하면 경고가 생성됩니다.

• NO_ZERO_IN_DATE

NO_ZERO_IN_DATE 모드는 서버가 연도 부분이 0이 아니지만 월 또는 일 부분이 0 인 날짜를 허용하는지 여부에 영향을줍니다 (이 모드는 '2010-00-01'또는 '2010-01-00'과 같은 날짜에 영향을 미치지 만 '0000-00-00'서버가 '0000-00-00'을 허용하는지 여부를 제어하려면 NO_ZERO_DATE 모드를 사용하십시오.) NO_ZERO_IN_DATE의 효과는 엄격한 SQL 모드의 사용 가능 여부에 따라 달라집니다.
this이 모드를 사용하지 않으면 부품 수가 0 인 날짜가 허용되고 삽입시 경고가 표시되지 않습니다.
this이 모드를 사용하면 날짜가 0 인 날짜가 '0000-00-00'으로 삽입되고 경고가 표시됩니다.
this이 모드와 엄격 모드를 사용하면 IGNORE가 주어지지 않는 한, 부품 수가 0 인 날짜는 허용되지 않으며 삽입하면 오류가 발생합니다. INSERT IGNORE와 UPDATE IGNORE의 경우, 파트가 0 인 날짜는 '0000-00-00'으로 삽입되고 경고가 생성됩니다.
MySQL 5.6.17부터는 NO_ZERO_IN_DATE가 사용되지 않으며 sql_mode 값을 포함하도록 설정하면 경고가 생성됩니다.

• onLY_FULL_GROUP_BY

SELECT 목록, HAVING 조건 또는 ORDER BY 목록이 GROUP BY 절에 이름이 지정되지 않은 집계되지 않은 열을 참조하는 쿼리를 거부합니다.
표준 SQL에 대한 MySQL 확장은 HAVING 절의 참조를 선택 목록의 별명이 지정된 표현식으로 허용합니다. onLY_FULL_GROUP_BY를 사용하면이 확장을 사용할 수 없으므로 HAVING 절을 별표없는 표현식을 사용하여 작성해야합니다.
추가적인 토론과 예제는 12.18.3 절. "GROUP BY의 MySQL 처리"를보십시오.

• PAD_CHAR_TO_FULL_LENGTH

기본적으로 후미 공백은 검색시 CHAR 열 값에서 잘립니다. PAD_CHAR_TO_FULL_LENGTH가 활성화되면 트리밍이 발생하지 않고 검색된 CHAR 값은 전체 길이로 패딩됩니다. 이 모드는 후행 공백이 검색시 유지되는 VARCHAR 열에는 적용되지 않습니다.

• PIPES_AS_CONCAT

치료 || OR의 동의어가 아닌 CONCAT ()과 같은 문자열 연결 연산자로 사용됩니다.

• REAL_AS_FLOAT

REAL을 FLOAT의 동의어로 취급하십시오. 기본적으로 MySQL은 REAL을 DOUBLE의 동의어로 취급합니다.

• STRICT_ALL_TABLES

모든 저장소 엔진에 대해 엄격한 SQL 모드를 사용합니다. 유효하지 않은 데이터 값은 거부됩니다. 자세한 내용은 Strict SQL Mode를 참조하십시오.

• STRICT_TRANS_TABLES
트랜잭션 저장 엔진 및 가능한 경우 비 트랜잭션 저장 엔진에 엄격한 SQL 모드를 사용합니다. 자세한 내용은 Strict SQL Mode를 참조하십시오.


https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html

반응형