MySQL의 연구는 속성 SQL_MODE 노트

최근의 연구 "MySQL의 기술 내부자 : SQL 프로그래밍"에서 메모했다,이 블로그의 노트 블로그의 유형, 또한 다른 사람을 도울 수있는, 자신의 검토 후에 촉진하기 위해, 공유하다

SQL_MODE은 : MySQL은 매우 다양한 고유 특성과 특정 기능을 지원하는 속성을 설정하여 달성 할 수있다

 # 全局的SQL_MODE 
 SELECT @@global.sql_mode;
 # 当前会话的SQL_MODE
 SELECT @@session.sql_mode; 

SQL_Mode 디폴트 값이 SQL_mode MySQL의 구성 파일 (의 my.ini 또는 my.cnf 파일) 제공, 또는 명령에 직접 배치 될 수있는 비어

엄격한 모드 : sql_mode의 STRICT_TRANS_TABLES 또는 STRICT_ALL_TABLES을 의미 엄격 모드는 널의 요구 사항에 기록되어, null이 아닌 값의 필드로 잘못된 연산을 설정할 수 없습니다, 또는 기록은 '2019와 같은 유효하지 않은 날짜 데이터입니다 '-09-40

SET GLOBAL sql_mode ='STRICT_TRANS_TABLES';
SET GLOBAL sql_mode ='STRICT_ALL_TABLES';

데이터 원본 데이터가 연결 CONCAT과 직접 설정하지 존재 :

set @@session.sql_mode=concat(@@sql_mode,',IGNORE_SPACE');
  • STRICT_TRANS_TABLES가 : 엄격 모드를 사용, 단지 값 (예를 들어, 스토리지 엔진은 InnoDB에있다) 트랜잭션 테이블에 기록 할 수없는 경우 트랜잭션 테이블이 비 트랜잭션 테이블에 영향을주지 않습니다 영향은 현재 작업이 비 트랜잭션 테이블에 영향을주지 않습니다 중단 (스토리지 엔진이 MYISAM 등)
  • STRICT_ALL_TABLES는 : STRICT_ALL_TABLES을 사용하도록 설정하면, 엄격한 모드는 모든 엔진 테이블에 사용 가능
  • ANSI_QUOTES : ANSI_QUOTES는이 모드를 오픈하기 때문에, 큰 따옴표는 식별자로 해석됩니다 문자열 따옴표를 참조 할 수 없습니다 활성화
  • ALLOW_INVALID_DATES :이 모드를 사용하는 경우, 예를 들어 만 달 여부를 1에서 12로, 날짜는 1 ~ 31 일이 시험입니다 확인, 검사 날짜 완전히 개방되지 않습니다, 날짜 유형은 가능하지만, 타임 스탬프입니다 효과 없다
  • ERROR_FOR_DIVISION_BY_ZERO : 데이터가 0으로 나눈 값 (또는 MOD는 (경우 삽입 또는 업데이트 프로세스는,
    X, 0))에서 오류가 발생하지 오픈 모드 변경하는 경우, 데이터는 0에 의해 분할되고, NULL 값은 MySQL 반환
  • HIGH_NOT_PRECEDENCE는 NOT : B와 C 사이,하지만 MySQL의 일부 이전 버전 (안)으로 해석하지 (B와 C 사이)로 해석됩니다 같은 아니 B와 C 사이로, 표현의 우선 순위의 이전 버전을 엽니 다 당신은 HIGH_NOT_PRECEDENCE을하지 열립니다이 이전 버전을 사용하려는 경우
  • IGNORE_SPACE : 함수 이름과 괄호 사이의 공간을 무시,이 속성은 기본적으로 설정되어 있지, 일반적으로 같은 t (1)에서 선택 횟수로 열 수있는 특수한 상황으로, 열 권장하지 않습니다; 계수 사이의 공간이 될 것입니다 오류는이 상황이, 테이블 이름,이 테이블 수 공간 아닌 것, 오류 후 열리지 않습니다 만, 테이블 또는 열 이름이 명명 된 계산이없는 한 일반적으로, 함수 공간과 괄호 안에 직접하지 않습니다 이름하지만, 함수의 이름
  • GRANT는 사용자가 빈 암호를 생성 금지 : NO_AUTO_CREATE_USER를
  • NO_AUTO_VALUE_ON_ZERO이 :이 속성은 자동으로 제로 쓰기 값을 허용하지 않는 열을 증가하도록 설정되어, 또한 0이 작성된 경우,하지, 0 쓰기 제로 또는 null를 작성, 데이터 시트에 데이터 없었다 주문을 작성합니다 유추
  • NO_BACKSLASH_ESCAPES : 백 슬래시 ""와 같은 일반 문자가 아닌 탈출
  • NO_DIR_IN_CREATE : 테이블을 만들 때 모든 색인 디렉토리 및 DATE DIRECTORY 옵션을 무시
  • NO_ENGINE_SUBTRACTION : 사용되는 스토리지 엔진이 기본 스토리지 엔진을 사용하여 컴파일하지 않거나하지 않고, 예외가 발생,
  • NO_UNSIGNED_SUBTRACTION :이 속성을 사용, 두 개의 부호없는 뺄셈 유형 서명 반환 형식
  • NO_ZERO_DATE : 0 포맷은,이 속성을 활성화 한 후,이 유형의 데이터를 기록 할 예외 "0000-00-00 0시 0분 0초"같은 날짜에 대한 쓰기를 허용하지 않습니다
  • 엄격 모드의 경우, 날짜와 제로의 달은 허용되지 않습니다 NO_ZERO_IN_DATE를
  • ONLY_FULL_GROUP_BY : 당신이 선택하면 발생합니다 오류에 의해 그룹에 표시되지 않습니다
  • PAD_CHAR_TO_FULL_LENGTH :가 0x20의 문자 유형 필드, 빈 데이터를 가로 챌 수 없습니다 질의 시간 동안, 소위 빈 데이터가 자동으로 채워 데이터
CREATE TABLE t (a CHAR(10));
INSERT INTO t SELECT 'a';

여기에 그림 삽입 설명
기본적으로 쿼리는 PAD_CHAR_TO_FULL_LENGTH을 설정하면됩니다 체크 아웃,이다 :
여기에 그림 삽입 설명

  • REAL_AS_FLOAT : 대신 두 배의 동의어의 FLOAT에 대한 동의어로서 REAL
  • PIPES_AS_CONCAT 다음 "||"문자열 연결 연산자는 오라클이 있음으로 간주, 또는 대신 사업자 및

여기에 몇 가지 옵션의 조합은 다음과 같습니다 :

  • ANSI : RELA_AS_FLOAT에 해당 조합 PIPES_AS_CONCAT ANSI_QUOTES의 IGNORE_SPACE
  • ORACLE : 조합 PIPES_AS_CONCAT에 해당 ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS 및 NO_AUTO_CREATE_USER
  • 전통 : 等同 于 STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION 的 组合
  • MSSQL : 조합 PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS 및 NO_FIELD_OPTIONS 동등
  • DB2 : 조합 PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS과 NO_FIELD_OPTIONS에 해당
  • MYSQL323 : NO_FIELD_OPTIONS 및 HIGH_NOT_PRECEDENCE의 조합에 해당
  • MYSQL40 : NO_FIELD_OPTIONS 및 HIGH_NOT_PRECEDENCE의 조합에 해당
  • MAXDB : 조합 PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS 및 NO_AUTO_CREATE_USER 동등

추천

출처www.cnblogs.com/mzq123/p/11668604.html